我必须在国际上分发我的应用程序.
假设我有一个控件(如备忘录),用户输入一些文本.用户可以是日语,俄语,加拿大等
我想将字符串保存为磁盘作为TXT文件供以后使用.我将使用我的OWN函数来编写文本,而不是像TMemo.SaveToFile()这样的东西.
如何将字符串保存到磁盘?在UTF8或UTF16格式?
谢谢
解决方法
它们之间的主要区别在于UTF8向后兼容ASCII.只要您只使用前128个字符,则不支持Unicode感知的应用程序仍然可以处理数据(这可能是一个优点或缺点,具体取决于您的方案).特别是,当切换到UTF16时,每个API函数需要调整16位字符串,而使用UTF8时,如果不进行任何字符串处理,则可以将旧的API函数保留不变.
UTF8也不依赖于endianess,而UTF16则可能会使字符串I / O复杂化.
UTF8也不依赖于endianess,而UTF16则可能会使字符串I / O复杂化.
一个常见的误解是,UTF16更容易处理,因为每个字符总是占据两个字节.也就是说,不幸的是不是这样. UTF16是一种可变长度编码,其中字符可能占用2或4字节.所以与UTF8有关可变长度问题的任何困难也适用于UTF16.
最后,存储大小:关于UTF16的另一个常见的神话是,对于大多数外语,它比UTF8更具有存储效率.所有欧洲语言的UTF8占用较少的存储空间,每个字符可以编码一个或两个字节.非BMP字符在UTF8和UTF16中占用4个字节. UTF16占用较少存储空间的唯一情况是,如果您的文本主要由U 0800到U FFFF范围内的字符组成,其中存储了中文,日文和印地文字符.
BoostCon 2014年詹姆斯·麦克奈利斯(James McNellis)发表了很好的演讲,详细讨论了不同编码之间的各种权衡.即使这个谈话在C中被称为Unicode,整个上半部分实际上是语言不可知的. video recording of the full talk is available at Boostcon’s Youtube channel,而slides can be found on github.