我需要在一个标准的WinForms文本框中迭代可能的Unicode。例如,包含此单词的文件:
“likable”
在十六进制查看器(如XVI32)中查看时:
但是,当这是在文本框中,并且我试图一次访问一个字节,而不是第一个字节是0xE2时,我得到0x1C。
由于textboxes支持多种编码,我也想这样做,但这似乎不起作用。
对于初学者,我想创建一个byte[]数组,将这些字节存储到该数组中,并将它们写出(然后从那里继续)。
我希望代码是编码不可知的,如果这是可能的。
我想通了。“符号是0x201C,所以这就解释了一切。
谢谢!
发布于 2018-09-09 21:22:05
您正在正确地访问字符串的字节,您不能忽略使用字符串进行编码。
您的示例文件是用UTF8编码的,所以“是3个字节的0xE2 0x80 0x9C
。您的TextBox
中的字符串将是一个以UTF-16编码的System.String,因此使用“作为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()
。
https://stackoverflow.com/questions/52248015
复制相似问题