Как определить, является ли байтовое чтение японским или английским?

У меня есть массив, который содержит символы японского и ascii.
Я пытаюсь определить, являются ли прочитанные символы английскими или японскими.

чтобы решить это, я следовал как

  1. прочитайте первый байт, если многочастотная ширина не равна единице, переместите указатель на следующий байт
    теперь отображаем все два байта вместе и показываем, что японский символ был прочитан.
  2. если мультисимвольная ширина равна единице, отобразить байт. и показать сообщение на английском было прочитано.

Алгоритм выше работает нормально, но не работает в случае полуширины в японском языке, например, シ, ァ и т. д., так как это только один байт.
Как я могу узнать, являются ли символы японскими или английскими?

** Примечание: ** Что я пытался
Я прочитал из Интернета, что первый байт скажет, японский он или нет, о котором я рассказал в шаге 1 моего алгоритма. Но это не будет работать для половины ширины.

РЕДАКТИРОВАТЬ:
Проблема, которую я решал, включает в себя управляющие символы 0X80 в начале и конце моих символов, чтобы идентифицировать последовательность символов.
Я написал следующее, чтобы определить конец контрольного символа.

cntlchar ….. (мои персонажи могут быть японцами) ….. cntlchar

if ((buf[*p+1] & 0X80) && (mbMBCS_charWidth(&buf[*p]) == 1))
// end of control characters reached
else
// *p++

это работало хорошо, когда для английского языка, но не работало для японской полуширины.

Как я могу справиться с этим?

-3

Решение

Ваши данные должны использовать Кодовая страница Windows 932. Это Угадай, но изучение кодовых точек показывает, что вы описываете.

Кодовая страница показывает, что символы в диапазоне 00 в 7F «английский» (лучше описание «7-битный ASCII»), символы в диапазонах 81 в 9F а также E0 в FF являются первым байтом многобайтового кода, и все между A1 а также DF являются полуширинными символами Кана.

3

Другие решения

Для отдельных байтов это практически невозможно или невозможно. Для больших наборов данных вы можете выполнить статистический анализ байтов и посмотреть, соответствуют ли они известным английским или японским шаблонам. Например, гласные очень распространены в английском тексте, но разные японские буквы будут иметь одинаковую частоту.

Вещи становятся более сложными, чем тестирование битов, если ваши данные содержат акцентированные символы.

Если вы имеете дело с данными Shift-JIS и зашифрованным текстом Windows-1252, в идеале вы просто переназначаете его в UTF-8. Не существует стандартного способа определения кодировки текста в текстовом файле, хотя такие вещи, как MIME, могут помочь, если они будут добавлены извне в качестве метаданных.

0

По вопросам рекламы [email protected]