我有兴趣将 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/