【问题标题】:C convert char array (string) UTF8 format to CP1252 (ASCII) formatC将char数组(字符串)UTF8格式转换为CP1252(ASCII)格式
【发布时间】:2018-07-20 10:10:49
【问题描述】:

我有两个 C 源文件:

  1. 第一个文件以 UTF-8 格式保存
  2. 第二个文件以 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的编码。
  • 初始帖子已更正,具有良好价值

标签: c utf-8 format buffer


【解决方案1】:

如果文件是源代码文件,那么您必须告诉编译器每个文件的源“字符集”是什么。默认情况下,您可能正在执行此操作。如果这两个文件具有不同的编码,您可能必须在每个文件上单独运行编译器。如果差异出现了,那么你做错了。

或者,转换源文件编码,使它们都是相同的编码,以使您的项目更简单。但是,这并没有绕过告诉编译器正确编码的要求。 这适用于使用任何程序打开任何文本文件或将其传达给其他人。

【讨论】:

  • 感谢您的回答,但我已经使用源文件示例来轻松理解问题。事实上,我无法为编译器或输入/输出信息选择正确的编码格式。我知道我的信息编码错误。
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 2017-04-26
  • 2019-06-14
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
相关资源
最近更新 更多