2016-07-22 4 views
1

Делаю C# программу, которая генерирует QRCode с библиотекой ZXing для чтения с помощью устройства Windows Mobile Handheld (C#, но патентованного считыватель штрих-кода: Motorola Symbol)Различные значения ASCII для одного символа

я установил содержание тега é (острая строчные е) с Winform текстового полем и дать ему читать на устройство, которое считывает Ú (острые прописные U)

Когда я прочитал бирку с Android Barcode Scanner это читает é ...

[Я не могу загрузить изображения здесь, я выложу barc ода позже]

Я полагаю кодирование здесь проблема, поэтому я решил посмотреть на посланные байтах: 233

На этом сайте: http://www.ascii-code.com/, он говорит, что é является 233, который является ожидаемым поведением. Но на этом сайте: http://www.theasciicode.com.ar/ говорит, что é - 130 и Ú - 233! (btw Я набираю Alt + 233 для отображения Ú на компьютере под управлением Windows)

EDIT: по-видимому, на первом сайте отображаются символы ISO-8859-1 (windows-1252). Но остается вопрос: , в котором кодировка é закодирована 130 согласно второму сайту?

EDIT 2: Я полностью согласен с тем, что UTF-8 легко решит мою проблему (работает с android, но я не могу сказать свое устройство «Эй, этот штрих-код кодируется UTF-8!», Поэтому он покажет мне необработанную информацию см ответить ниже

  • Что происходит.? (редактирование: в ответ одного символа несоответствия кодирования)
  • является ли это нормальным иметь два конкретных значений ASCII для одного символа (редактирование: ответил, используются две кодировки)
  • Поскольку я получаю код 233, как я могу сказать, что устройство Handheld для преобразования этого значения?

Спасибо заранее!

+2

ASCII только 7 бит; нет такой вещи, как код ASCII 130 или 233; по определению: * это не ASCII *. Итак, вам нужно спросить: что такое кодировка/кодировка? Мы не можем вам сказать. –

+0

Согласовано для лучшего соглашения об именах. Итак, как я могу назвать те значения, которые больше 127? На первом сайте говорится, что это ISO-8859-1 (так что Windows-1252 я полагаю), но как насчет второго сайта? – Goufalite

+0

Хорошо. Эти сайты говорят о «расширенном ascii», но совершенно бессмысленны без контекста кодирования, таким образом, непонимания, таким образом, этот вопрос с stackoverflow – Goufalite

ответ

1

Теперь я получаю: считыватель штрих-кода устройства считывает данные в DOS 850 кодировка!

Первый намек был на клавиатуре: просмотрев веб-сайт, я обнаружил, что вы можете увидеть свою кодировку по умолчанию в Windows, набрав команду chcp. Он показывает 850 на моем компьютере. Быстрый поиск по почте отправил меня на эту страницу: https://en.wikipedia.org/wiki/Code_page_850где é - 130! Ура !

Все, что я должен был сделать, это сказать устройство для отображения значений в Windows-1252 кодировка:

Encoding.Default.GetString(Encoding.GetEncoding(850).GetBytes(txt),0,txt.Length); 

Для общего назначения вопроса, благодаря @MarkGravell, веб-сайты, где ошибочно говорят о общие «расширенные ascii» коды, но эти коды меняются между кодировками (https://en.wikipedia.org/wiki/Category:DOS_code_pages) и поэтому не имеют значения.

2

Нормально иметь 2 разных символа для одного и того же кода ASCII. Читайте о кодовых страницах ASCII, таких как Win1250,1251,1252 ...

+2

Я не согласен с используемым здесь языком; нет, это не нормально иметь 2 символа для одного и того же кода ASCII. Однако верно, что те же ** необработанные байты **, интерпретируемые разными кодировками/кодовыми страницами, могут давать разные * кодовые точки *. Кодовые страницы, которые не являются ASCII (например, перечисленные вами): ** не являются ASCII **. Теперь мы можем аргументировать семантику того, являются ли 8-битные расширенные кодовые страницы ASCII поистине ASCII, но: бессмысленно говорить о них, если вы также явно не упоминаете *, какую кодовую страницу * –

+0

@MarcGravell Объясните язык здесь: http: //www.ascii.ca/cp1250.htm – i486

+1

простой; все, что я сказал ранее, начинаю «Теперь, мы могли бы ...» - это Windows Codepage 1250. Это должно быть ** не ** называться просто «ASCII», и это * не просто «ASCII». В тот же день его можно было бы назвать «ANSI» –

0

Код ASCII уникален в 7 бит (от 0 до 127). Тем не менее, существует много разных расширенных версий на 8 бит. См. https://en.wikipedia.org/wiki/Extended_ASCII Если вам нужны специальные символы как «é» или «ù», я бы предложил вам использовать кодировку UTF- (8 или 16) или Unicode.

+0

Согласовано с UTF-8, но: 'é'' '' '' '' '' '' '' '' ''. Handheld-устройство будет интерпретировать их как '├®' (у android нет проблем!), Что хуже. Я отредактировал мой вопрос: я не могу сказать свое устройство «эй, этот штрих-код закодирован в кодировке UTF-8» – Goufalite