[英]read and write utf8 string to file
如果我在C中有UTF8编码的字符串(基本上是char
或unsigned 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.