UTF和UCS之间有什么区别.
在C++字符串中表示非欧洲字符集(使用UTF)的最佳方法是什么?我想知道你的建议:
代码中的内部表示
用于在运行时进行字符串操作
用于将字符串用于显示目的.
最佳存储表示(即在文件中)
最好的有线传输格式(可能在不同架构上的应用程序之间的传输,并具有不同的标准区域设置)
John Milliki.. 8
UTF和UCS之间有什么区别.
UCS编码是固定宽度,并由每个字符使用的字节数标记.例如,UCS-2每个字符需要2个字节.代码点超出可用范围的字符无法以UCS编码进行编码.
UTF编码是可变宽度,并由存储字符的最小位数标记.例如,UTF-16每个字符至少需要16位(2个字节).具有大代码点的字符使用更大数量的字节进行编码 - 对于UTF-16中的星体字符,使用4个字节.
代码中的内部表示
最佳存储表示(即在文件中)
最好的有线传输格式(可能在不同架构上的应用程序之间的传输,并具有不同的标准区域设置)
对于现代系统,最合理的存储和传输编码是UTF-8.在某些特殊情况下,其他可能是合适的 - 旧邮件服务器为UTF-7,编写糟糕的文本编辑器为UTF-16--但最常见的是UTF-8.
首选内部表示取决于您的平台.在Windows中,它是UTF-16.在UNIX中,它是UCS-4.每个都有其优点:
UTF-16字符串从不使用比UCS-4字符串更多的内存.如果您将许多大字符串存储在主要基本多语言平面(BMP)中,则UTF-16将比UCS-4需要更少的空间.在BMP之外,它将使用相同的金额.
UCS-4更容易推理.由于UTF-16字符可能会分割为多个"代理项对",因此正确分割或呈现字符串可能具有挑战性.UCS-4文本没有此问题.UCS-4在"char"数组中的行为与ASCII文本非常相似,因此可以轻松移植现有的文本算法.
最后,一些系统使用UTF-8作为内部格式.如果您需要与现有的基于ASCII或ISO-8859的系统进行互操作,这是很好的,因为UTF-8文本中间不存在NULL字节 - 它们是UTF-16或UCS-4.
UTF和UCS之间有什么区别.
UCS编码是固定宽度,并由每个字符使用的字节数标记.例如,UCS-2每个字符需要2个字节.代码点超出可用范围的字符无法以UCS编码进行编码.
UTF编码是可变宽度,并由存储字符的最小位数标记.例如,UTF-16每个字符至少需要16位(2个字节).具有大代码点的字符使用更大数量的字节进行编码 - 对于UTF-16中的星体字符,使用4个字节.
代码中的内部表示
最佳存储表示(即在文件中)
最好的有线传输格式(可能在不同架构上的应用程序之间的传输,并具有不同的标准区域设置)
对于现代系统,最合理的存储和传输编码是UTF-8.在某些特殊情况下,其他可能是合适的 - 旧邮件服务器为UTF-7,编写糟糕的文本编辑器为UTF-16--但最常见的是UTF-8.
首选内部表示取决于您的平台.在Windows中,它是UTF-16.在UNIX中,它是UCS-4.每个都有其优点:
UTF-16字符串从不使用比UCS-4字符串更多的内存.如果您将许多大字符串存储在主要基本多语言平面(BMP)中,则UTF-16将比UCS-4需要更少的空间.在BMP之外,它将使用相同的金额.
UCS-4更容易推理.由于UTF-16字符可能会分割为多个"代理项对",因此正确分割或呈现字符串可能具有挑战性.UCS-4文本没有此问题.UCS-4在"char"数组中的行为与ASCII文本非常相似,因此可以轻松移植现有的文本算法.
最后,一些系统使用UTF-8作为内部格式.如果您需要与现有的基于ASCII或ISO-8859的系统进行互操作,这是很好的,因为UTF-8文本中间不存在NULL字节 - 它们是UTF-16或UCS-4.