Как перебрать Юникод в текстовом поле? - PullRequest
0 голосов
/ 09 сентября 2018

Мне нужно перебрать возможный Unicode в стандартном текстовом поле WinForms. Например, файл, содержащий это слово:

“likable”

при просмотре в программе просмотра в шестнадцатеричном формате (например, XVI32):

enter image description here

Однако, когда это находится в текстовом поле, и я пытаюсь получить доступ к байтам по одному, вместо того, чтобы первый байт был 0xE2, я получаю 0x1C.

Поскольку текстовые поля поддерживают различные кодировки, я бы тоже хотел это сделать, но, похоже, это не работает.

Для начала я бы хотел создать массив byte [], сохранить эти байты в этом массиве и записать их (и продолжить с этого момента).

Я бы хотел, чтобы код был независим от кодировки, если это возможно.

Я понял это. Знак "0x201C, так что это все объясняет.

Спасибо!

1 Ответ

0 голосов
/ 10 сентября 2018

Вы правильно обращаетесь к байтам строки, вы просто не можете игнорировать кодирование со строкой.

Ваш файл примера закодирован в UTF-8, поэтому « - это 3 байта 0xE2 0x80 0x9C. Строка в вашем TextBox будет System.String , которая закодирована в UTF-16, поэтому «, которая использует в качестве 16-битного слова 0x201C. На x86 слова хранятся little endian , поэтому они будут храниться в памяти как 0x1C 0x20. Это именно то, что вы видите.

При чтении байтов из строки в TextBox (или любой строке) это всегда будет UTF-16 в .Net. При чтении файла с диска (или при копировании его из буфера обмена) .Net преобразует байты UTF-8 в UTF-16 System.String.

Если вы хотите получить доступ к байтам System.String в качестве байтов UTF-8, используйте System.Text.Encoding.UTF8.GetBytes().

...