gpt4 book ai didi

c - 处理 C 中的特殊字符(UTF-8 编码)

转载 作者:太空狗 更新时间:2023-10-29 16:29:19 25 4
gpt4 key购买 nike

我正在用 C 编写一个小型应用程序,它读取一个简单的文本文件,然后逐行输出。问题是文本文件包含特殊字符,如 Æ、Ø 和 Å 等。当我在终端中运行程序时,这些字符的输出用“?”表示。

有没有简单的解决方法?

最佳答案

要事第一:

  1. 读入缓冲区
  2. 使用 libiconv 或类似工具从 UTF-8 获取 wchar_t 类型并使用 wprintf() 等宽字符处理函数
  3. 使用 C 中的宽字符函数!大多数文件/输出处理函数都有宽字符变体

确保您的终端可以处理 UTF-8 输出。拥有正确的语言环境设置和操作语言环境数据可以自动为您打开和转换大量文件……这取决于您在做什么。

请记住,UTF-8 中代码点或字符的宽度是可变的。这意味着您不能像使用 ASCII 那样寻找一个字节并开始阅读……因为您可能会落在代码点的中间。在某些情况下,好的图书馆可以做到这一点。

这里有一些代码(不是我的)演示了 C 语言中 UTF-8 文件读取和宽字符处理的一些用法。

#include <stdio.h>
#include <wchar.h>
int main()
{
FILE *f = fopen("data.txt", "r, ccs=UTF-8");
if (!f)
return 1;

for (wint_t c; (c = fgetwc(f)) != WEOF;)
printf("%04X\n", c);

fclose(f);
return 0;
}

链接

  1. libiconv
  2. Locale data in C/GNU libc
  3. Some handy info
  4. Another good Unicode/UTF-8 in C resource

关于c - 处理 C 中的特殊字符(UTF-8 编码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1373463/

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