【发布时间】:2018-07-20 10:10:49
【问题描述】:
我有两个 C 源文件:
- 第一个文件以 UTF-8 格式保存
- 第二个文件以 CP1252 格式保存。
我的示例消息是:char mybuffer[] = "lé\r\n";
在 UTF-8 源文件中,字符串已使用 5 个字节进行编码:
6C C3 A9 0D 0A
在 CP1252 源文件中,字符串已使用 4 个字节进行编码:
6C E9 0D 0A
我知道这两个结果都不错,因为可以设置输出格式正确读取两个结果。
但我需要将 UTF-8 数组变量转换为 CP1252 格式。
我只使用 C 语言。
【问题讨论】:
-
见iconv()——它不在C标准库中,所以根据你的目标平台,你可能需要链接一个额外的库。符合 POSIX 的系统应该有它。
-
旁注,您的编码不正确,您正在显示 32 位 2 的补码整数的表示,这可能是由于符号扩展实际字节 ... 和
\n(0x0a) 完全丢失。 -
我使用 printf("%#08x, ", mybuffer[i]);跟踪存储的每个十六进制字符,最后的 "\n" 由 0x0d 编码
-
是的,那是错误的...... UTF-8 和 CP1252 都是字节编码,一个字节有 8 位,所以要看到真正的表示,你需要
printf("0x%02x", (unsigned char) bufferTMP[i]);--0x0d是\r的编码。 -
初始帖子已更正,具有良好价值