c# - 了解文本编码(在 .Net 中)

标签 c# .net vb.net text encoding

我在文本编码方面做得很少。老实说,我什至不知道它到底是什么意思。

例如,如果我有这样的东西:

Dim myStr as String = "Hello"

是否以特定格式“编码”在内存中?该格式是否取决于我使用的语言?

如果我在另一个国家,例如中国,并且我有一串中文(普通话?如果我在这里使用了错误的词,我深表歉意)将是以下代码(我在英文字符串)仍然有效吗?

System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
return encoding.GetBytes(str);

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

最后,我已经使用 .Net 工作了几年,我从未见过、听说过或不得不对 Encoding 做任何事情。我是异常(exception),还是不常见?

最佳答案

.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 的全面概述 here .

关于 Unicode 字符编码的出色概述/介绍是 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

关于c# - 了解文本编码(在 .Net 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864272/

相关文章:

c# - 检查c#中路径中是否存在文件夹?

C# 关闭时最小化到系统托盘

c# - WPF C#将所有I/O音频设备静音/取消静音

c# - 如何以与 stackoverflow 相同的方式路由 URL

c# - WPF 类型或命名空间名称 'Browser' 在命名空间 'System.Windows' 中不存在(是否缺少程序集引用?)

.net - .NET 在 32 位或 64 位系统中有什么区别?

sql-server - SSIS 包未从服务器运行

xml - 如何返回动态 XML 文件以在 VB.net 中使用

mysql - 使用 vb.net GUI GridDataView 同步 Mysql 数据库

c# - Linq:创建一个列表,获取列表中每个节点的左右子节点