如何在文本框中迭代 Unicode?
How to iterate over Unicode in a textbox?
我需要在标准 WinForms 文本框中迭代可能的 Unicode。例如,一个包含这个词的文件:
“likable”
在十六进制查看器(如 XVI32)中查看时:
但是,当它在文本框中并且我尝试一次访问一个字节时,我得到的不是第一个字节 0xE2,而是 0x1C。
由于文本框支持多种编码,我也想这样做,但这似乎不起作用。
对于初学者,我想创建一个 byte[] 数组,将这些字节存储到该数组中并将它们写出(然后从那里继续)。
如果可能的话,我希望代码与编码无关。
我明白了。 " 符号是 0x201C,这就说明了一切。
谢谢!
您正在正确访问字符串的字节,只是不能忽略字符串编码。
您的示例文件以 UTF-8 编码,因此 “ is the 3 bytes 0xE2 0x80 0x9C
. The string in your TextBox
will be a System.String which is encoded in UTF-16, so “ which uses as the 16 bit word 0x201C
. On x86, words are stored little endian,因此它将作为 0x1C 0x20
存储在内存中。这正是您所看到的。
从 TextBox
中的字符串(或任何字符串)中读取字节时,在 .Net 中它将始终为 UTF-16。从磁盘读取文件(或从剪贴板复制文件)时,.Net 会将 UTF-8 字节转换为 UTF-16 System.String
.
如果要以 UTF-8 字节访问 System.String
的字节,请使用 System.Text.Encoding.UTF8.GetBytes()
。
我需要在标准 WinForms 文本框中迭代可能的 Unicode。例如,一个包含这个词的文件:
“likable”
在十六进制查看器(如 XVI32)中查看时:
但是,当它在文本框中并且我尝试一次访问一个字节时,我得到的不是第一个字节 0xE2,而是 0x1C。
由于文本框支持多种编码,我也想这样做,但这似乎不起作用。
对于初学者,我想创建一个 byte[] 数组,将这些字节存储到该数组中并将它们写出(然后从那里继续)。
如果可能的话,我希望代码与编码无关。
我明白了。 " 符号是 0x201C,这就说明了一切。
谢谢!
您正在正确访问字符串的字节,只是不能忽略字符串编码。
您的示例文件以 UTF-8 编码,因此 “ is the 3 bytes 0xE2 0x80 0x9C
. The string in your TextBox
will be a System.String which is encoded in UTF-16, so “ which uses as the 16 bit word 0x201C
. On x86, words are stored little endian,因此它将作为 0x1C 0x20
存储在内存中。这正是您所看到的。
从 TextBox
中的字符串(或任何字符串)中读取字节时,在 .Net 中它将始终为 UTF-16。从磁盘读取文件(或从剪贴板复制文件)时,.Net 会将 UTF-8 字节转换为 UTF-16 System.String
.
如果要以 UTF-8 字节访问 System.String
的字节,请使用 System.Text.Encoding.UTF8.GetBytes()
。