Можно ли игнорировать кодировку textbox.text? - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть код, который считывает данные из элемента управления textbox.text в байтовый массив.Он использует кодировку UTF8 и не было никаких проблем.Код читает, скажем, M количество байтов из текстового поля и добавляет его к выводу в виде байтов.Это все работает нормально.

Когда данные записываются обратно, если текст не на английском языке, часто возникают проблемы.Например, если текст является китайским символом, повторяется несколько раз, что, по-видимому, для текстового поля 0xE5, 0x8D, 0x97.

Когда данные записываются обратно в текстовое поле, если, скажем, первая запись завершилась в 0xE5, когда следующая партия данных записывается обратно, начиная с 0x8D 0x97, она каким-то образом преобразуется в 0xEF 0xBF 0xBD.

enter image description here

Я просто использую Array.Copy.Ничего особенного.С английским нет проблем.На китайском (и на японском также) первая запись идет нормально, но вторая запись имеет некоторые из этих «поврежденных» символов.

Ответы [ 2 ]

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

Во-первых, спасибо за эту информацию.Я использовал только китайский в качестве примера.Код не будет знать язык и не должен заботиться.Это может быть хинди или японец.Ваш байт [] в строку - это то, что я использую.

После того, как я опубликовал вопрос, я понял, что код, похоже, правильно обрабатывает данные, а не записывает обратно в текстовый элемент управления Textbox.Я не уверен, что делает элемент управления, возможно, он «обнаруживает» язык или обнаруживает, что это не UTF8 и пытается какую-то кодировку.

НО в любом случае я отложил запись байтов обратно в текстовое поледо конца, и это, кажется, работает просто отлично.То есть я продолжаю добавлять байты обратно в массив, используя Array.Copy (...), и в конце записываю все это обратно в текстовое поле, используя UTF8, как вы упоминали.

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

Проблема не должна быть связана с чтением из / записи в текстовое поле.Проблема в том, как вы конвертируете текст в байты и обратно.Вы не предоставили никакого кода, поэтому мой код должен быть не совсем таким, как вы хотите, но для преобразования строки UTF-8 в байты вы можете сделать:

byte[] bytes = System.Text.Encoding.UTF8.GetBytes(textBox1.Text);

Чтобы преобразовать byte[] в строку:

textbox1.Text = System.Text.Encoding.UTF8.GetString(bytes);

Если вы игнорируете кодирование и просто используете кодировку ascii, это приведет к потере данных при преобразовании в байты.

Существует также вопрос, связанный с преобразованием китайского языка в byte[]: Как кодировать и декодировать сломанные символы китайского языка / Юникод?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...