c - Linux 和 C 编程 : How can I write utf-8 encoded text to a file?

标签 c linux encoding locale

我有兴趣将 utf-8 编码的字符串写入文件。

我使用低级函数 open() 和 write() 来完成此操作。 首先,我将语言环境设置为 utf-8 感知字符集 setlocale("LC_ALL", "de_DE.utf8")。 但生成的文件不包含 utf-8 字符,仅包含 iso8859 编码的变音符号。我做错了什么?

附录:我不知道我的字符串是否真的是 utf-8 编码的。我只是将它们以这种形式保存在源文件中:char *msg = "Rote Grütze";

查看文本文件内容的屏幕截图: alt text http://img19.imageshack.us/img19/9791/picture1jh9.png

最佳答案

更改区域设置不会更改使用 write() 写入文件的实际数据。您必须实际生成 UTF-8 字符才能将它们写入文件。为此,您可以使用库 ICU .

编辑问题后进行编辑:UTF-8 字符与 ISO-8859 的区别仅在于“特殊”符号(ümlauts、accénts 等)。因此,对于所有没有任何此符号的文本,两者都是等效的。但是,如果在程序中包含带有这些符号的字符串,则必须确保文本编辑器将数据视为 UTF-8。有时你只需要告诉它。

总而言之,如果源代码中的字符串采用 UTF-8 格式,那么您生成的文本也将采用 UTF-8 格式。

另一次编辑:为了确定,您可以使用 iconv 将源代码转换为 UTF-8:

iconv -f latin1 -t utf8 file.c

这会将所有 latin-1 字符串转换为 utf8,并且当您打印它们时,它们肯定会是 UTF-8。如果 iconv 遇到奇怪的字符,或者您看到输出字符串包含奇怪的字符,那么您的字符串已经是 UTF-8 了。

问候,

关于c - Linux 和 C 编程 : How can I write utf-8 encoded text to a file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/530287/

相关文章:

c - 时间戳传出数据包

c - 程序在 printPoly() 函数中进入无限循环

linux - PHPMD 不输出文件结果

linux - 如何在 Linux 的虚幻引擎 4 编辑器中强制使用 OpenGL 3?

linux - Linux 上的 UTF8 问题

c - NetBeans IDE 6.8 与 cygwin 1.7.5.1 不能很好地工作

c++ - 指向二维数组的指针 C、C++

linux - 在 Ubuntu Mate 上安装 STk Scheme 解释器

python - 如何修复使用 python 请求库时响应中出现的转义字符?

PowerShell 输出文件 : prevent encoding changes