繁体   English   中英

读取utf8字符串并将其写入文件

[英]read and write utf8 string to file

如果我在C中有UTF8编码的字符串(基本上是charunsigned char ?-数组),并且我想从文件中写入和读取它(例如,以二进制模式)。 与仅编写/读取ASCII字符相比,我需要做些什么?

简短答案:不,没什么不同

更长的答案:一如既往,这取决于..

这取决于您以后将用来读取文件的内容。 如果是其他应用程序,则可能需要通过在前面粘贴一个UTF-8 BOM来提示该文件是UTF-8编码的文本。 但是,通常不鼓励这样做,因此您通常可以回复简短的答案!

但是,您的注释暗示您对处理 char数组感兴趣,而不是简单地读取/编写它。 是的,您可能需要完全根据您想做的事情来做不同的事情。 由于单个“ unicode字符”可以被编码为数组中的多个字节,因此对于某些操作(例如,计算文本中的字长),您需要了解多字节字符。 但是,因为UTF8中的所有“额外”字节都设置了高位,所以您永远都不会将它们与普通字符混淆。 因此,诸如字符串搜索和替换之类的事情通常都是按照常规ASCII进行的。

如果您只是提出要求(不进行字符计数或修改),则不必担心。 在具有gcc的Linux上,您甚至可以将UTF8放在源代码中的字符串中,并且效果很好。

例如:

 puts("řčšéíčšřáčéířáéíščřáéíčřáščéřáěéířěéčšě"); //Will work correctly on Linux

例如,仅č不会由单个char表示。

只要您没有实际使用符号进行数学运算就可以,那么您应该会很好。

UTF8期望每个字符“单位” 至少 8位,并且保证有符号或无符号的C字符都具有这些。 没什么不同-当然, 除了当您习惯将“ a”加到“ b”(对文本进行无意义的操作)或在整数之间进行转换(与使用“ regular”进行转换一样好)时ASCII文本偶尔带有高ASCII字符,即,如果您在可能发生转换的情况下进行转换,则应该没事。

这样就可以了:如果您打算显示输出,则可能要使用与输出库相同的类型(有符号或无符号)。

如果必须将UTF8输出到屏幕控制台(OSX的Terminal窗口,它完全能够显示UTF8),则可以使用常规的char字符串,因此可以使用标准的stdlib和string函数。

暂无
暂无

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

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