gpt4 book ai didi

html - iconv 转换为 UTF-8 导致不可显示的字符

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:53 25 4
gpt4 key购买 nike

我在 C 中使用 iconv.h 将编码从 ISO-8859-* 转换为 UTF-8。我需要传入的流显示在浏览器中。但是转换后的结果没有在 chrome 中显示。在其他浏览器中,它工作正常。下面给出了一个字符串示例

char *str = "\x05\x86\x53";
char dest_str[100];
char *out = dest_str;
size_t inbytes = strlen(str);
size_t outbytes = sizeof dest_str;
printf("Before Conversion: %2x %2x %2x\n",str[0],str[1],str[2]);
iconv_t conv = iconv_open("UTF-8//TRANSLIT", "ISO-8859-9");

if (conv == (iconv_t)-1) {
perror("iconv_open");
return 1;
}

if (iconv(conv, &str, &inbytes, &out, &outbytes) == (size_t)-1) {
perror("iconv");
return 1;
}

dest_str[sizeof dest_str - outbytes] = 0;
printf("After Conversion: %2x %2x %2x\n",dest_str[0],dest_str[1],dest_str[2]);
puts(dest_str);

输出:转换前:5 ffffff86 53

转换后:5 ffffffc2 ffffff86

转换是否正确进行?如何解决chrome无法显示字符的问题?

最佳答案

据我所知,转换是正确的。唯一的问题是 UTF-8 字符串有四个字节,但您只打印前三个字节。

显然,05 是一个非打印字符。它的意思在浏览器上下文中没有意义。 (你为什么要发送它?)可能是 Chrome 拒绝打印任何带有控制代码的内容。

0x86 到 0xC2 0x86 的转换是正确的。但是,您使用的字体可能没有字形。在我的 Mac 上,情况似乎是这样。

编辑

checkout ISO-8859-9事实证明,您正在翻译的序列包含一个 ASCII 控制代码(0x05)、一个未定义字符(0x86)和一个 ASCII 可打印字符(0x53 或 S)。转换为 UTF-8 后,ASCII 字符(可打印或不可打印)保持不变,但将非 ASCII 字符正确转换为 UTF-8 两字节序列。三分之二的字符在呈现为文本时没有意义,Chrome 显然拒绝这样做。

关于html - iconv 转换为 UTF-8 导致不可显示的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42695036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com