繁体   English   中英

Linux和C编程:如何将utf-8编码的文本写入文件?

[英]Linux & C-Programming: How can I write utf-8 encoded text to a file?

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

我使用低级函数open()和write()做到了这一点。 首先,我使用setlocale("LC_ALL", "de_DE.utf8")将语言环境设置为可setlocale("LC_ALL", "de_DE.utf8") utf-8的字符集。 但是生成的文件不包含utf-8字符,仅包含iso8859编码的变音符号。 我究竟做错了什么?

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

请参阅屏幕快照以获取文本文件的内容: 替代文本http://img19.imageshack.us/img19/9791/picture1jh9.png

更改语言环境不会更改使用write()写入文件的实际数据。 您必须实际产生 UTF-8字符才能将它们写入文件。 为此,您可以将库用作ICU

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

综上所述,如果源代码中的字符串使用UTF-8,则您生成的文本将使用UTF-8。

另一个编辑 :可以肯定的是,您可以使用iconv将源代码转换为UTF-8:

iconv -f latin1 -t utf8 file.c

这会将您所有的latin-1字符串转换为utf8,当您打印它们时,它们肯定会使用UTF-8。 如果iconv遇到一个奇怪的字符,或者您看到带有奇怪字符的输出字符串,则您的字符串已经在UTF-8中。

问候,

是的,您可以使用glibc来实现。 他们称其为多字节而不是UTF-8,因为它可以处理多种编码类型。 查看手册的这一部分。

查找以前缀mb开头的函数,以及以wc前缀开头的函数,以从多字节转换为宽字符。 您必须首先使用setlocale()将语言环境设置为UTF-8,以便它选择此多字节支持实现。

如果您来自Unicode文件,我相信您要查找的功能是wcstombs()。

您能否在十六进制编辑器中打开文件,并通过一个简单的输入示例来验证写入的字节不是传递给write()的Unicode字符的值。 有时,文本编辑器无法确定字符集,并且您的文本编辑器可能已采用了ISO8859-1字符集。

完成此操作后,您可以编辑原始帖子以添加相关信息吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM