如何遍历文本框中的Unicode?

时间:2018-09-09 19:33:56

标签: c# winforms unicode-string

我需要遍历标准WinForms文本框中的可能的Unicode。例如,包含以下单词的文件:

“likable”

在十六进制查看器(例如XVI32)中查看时:

enter image description here

但是,当它在文本框中时,我尝试一次访问一个字节,而不是第一个字节为0xE2,而是0x1C。

由于文本框支持多种编码,所以我也想这样做,但这似乎行不通。

对于初学者,我想创建一个byte []数组,将这些字节存储到该数组中并写出(然后从那里继续)。

如果可能的话,我希望代码与编码无关。

我知道了。 “符号为0x201C,因此可以全面解释。

谢谢!

1 个答案:

答案 0 :(得分:2)

您正在正确访问字符串的字节,只是无法忽略字符串编码。

您的示例文件使用UTF-8编码,因此是3个字节0xE2 0x80 0x9CTextBox中的字符串将是一个System.String,它以UTF-16编码,因此用作16位单词0x201C。在x86上,单词存储为little endian,因此它将以0x1C 0x20的形式存储在内存中。正是您所看到的。

TextBox中的字符串(或任何字符串)中读取字节时,.Net中它将始终为UTF-16。从磁盘读取文件(或从剪贴板复制文件)时,.Net会将UTF-8字节转换为UTF-16 System.String

如果要以UTF-8字节的形式访问System.String的字节,请使用System.Text.Encoding.UTF8.GetBytes()