理解文本编码(在.Net中)

Rob*_* P. 18 .net c# vb.net encoding text

我对Text的编码做的很少.说实话,我甚至不知道它究竟意味着什么.

例如,如果我有类似的东西:

Dim myStr as String = "Hello"
Run Code Online (Sandbox Code Playgroud)

这是以特定格式在内存中"编码"的吗?这种格式取决于我使用的语言吗?

如果我在另一个国家,比如中国,我有一串中文(普通话?如果我在这里使用了错误的词语,我道歉)下面的代码(我在英文字符串上使用得很好)还是一样吗?

System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
return encoding.GetBytes(str);
Run Code Online (Sandbox Code Playgroud)

或者当转换无效时将.Net字符串转换为UTF8Encoding时会失去所有意义吗?

最后,我已经与.Net合作了几年,而且我从未见过,听说过或者不得不对编码做任何事情.我是例外,还是不常见的事情?

Bro*_*ass 27

.NET字符串类使用UTF16编码字符串- 这意味着每个字符2个字节(尽管它允许两个字符的特殊组合形成一个4字节字符,因此称为"代理对").

另一方面,UTF8将使用表示特定Unicode字符所需的可变字节数,即对于常规ASCII字符只有一个字节,但对于中文字符可能只有3个字节.两种编码都允许表示所有Unicode字符,因此它们之间总是存在映射 - 两者都是相同(unicode)字符集的不同二进制表示(即用于存储在内存中或磁盘上).

由于并非所有Unicode字符都能够容纳UTF-16保留的原始2字节,因此该格式还允许表示两个UTF-16字符的组合以形成4字节字符 - 所形成的字符称为"代理"或代理对,是一对16位Unicode编码值,它们一起代表一个字符.

UTF-8没有此问题,因为每个Unicode字符的字节数不固定.可以在此处收集有关UTF-8,UTF-16和BOM的良好总体概述.

Unicode字符编码的优秀概述/介绍是绝对最低每个软件开发人员绝对必须知道关于Unicode和字符集


Ken*_*kot 9

首先和前瞻:不要绝望,你并不孤单.一般来说,意识到字符编码和文本表示的处理是不常见的事情,但现在没有比现在更好的时间开始学习了!

在现代系统(包括.NET)中,文本字符串通过Unicode 代码点的某些编码在内存中表示.这些只是数字.角色的代码点A65.版权的代码点(c)169.泰语数字六的代码点是3670.

术语"编码"指的是这些数字如何在存储器中表示.使用了许多标准编码,因此当数据从一个系统传输到另一个系统时,文本表示可以保持一致.

一个简单的编码标准是UCS-2,其中代码点作为16位字存储在raw中.这是有限的,因为它只能代表代码点,0000-FFFF并且这样的范围不能涵盖Unicode代码点的全部范围.

UTF-16是.NET String类内部使用的编码.大多数字符在这里适合单个16位字,但是大于FFFF使用代理对编码的值(参见Wiki).由于这种编码方案,D800-DFFFUTF-16无法插入代码点.

UTF-8可能是目前使用最流行的编码,出于维基文章中概述的多种原因.