本质上,字符串使用UTF-16字符编码格式
但当储蓄vs StreamWriter时:
此构造函数使用UTF-8编码创建StreamWriter,而不使用
我看过这个示例(断开的链接被删除):
对于某些字符串来说,utf8
更小,而对于其他字符串来说,utf-16
更小.
- 那为什么呢.net使用
utf16
作为字符串的默认编码,使用utf8
作为保存文件的默认编码?
非常感谢.
p.s. Ive already read 100
本质上,字符串使用UTF-16字符编码格式
但当储蓄vs StreamWriter时:
此构造函数使用UTF-8编码创建StreamWriter,而不使用
我看过这个示例(断开的链接被删除):
对于某些字符串来说,utf8
更小,而对于其他字符串来说,utf-16
更小.
utf16
作为字符串的默认编码,使用utf8
作为保存文件的默认编码?非常感谢.
p.s. Ive already read 100
If忽略代理项对(或者等效地,您的应用程序可能需要基本多语言平面之外的字符),UTF-16有一些很好的属性,主要是因 for each 代码单元总是需要两个字节,并且每个代码单元表示所有的BMP字符.
考虑原始类型char
.如果我们使用UTF-8作为内存中的表示,并希望处理all个Unicode字符,那么它应该有多大?最多可以有4个字节...这意味着我们必须分配4个字节.在这一点上,我们不妨使用UTF-32!
当然,我们可以使用UTF-32作为char
表示法,但在string
表示法中使用UTF-8,我们可以随时随地进行转换.
UTF-16的两个缺点是:
(顺便说一句,我认为Windows对Unicode数据使用UTF-16,出于互操作的原因,.NET也应该效仿.不过,这只是把问题推进了一步.)
考虑到代理对的问题,我怀疑如果语言/平台是从头开始设计的,没有互操作要求(但是基于Unicode的文本处理),UTF-16将不是最佳 Select .UTF-8(如果您希望提高内存效率,并且不介意到达第n个字符时的处理复杂性)或UTF-32(反之亦然)将是更好的 Select .(由于规格化形式不同,即使到达第n个字符也有"问题".文本很难.)