Как заставить текстовый файл иметь больше чем одно кодирование?

У меня есть файл, который является закодированным ANSI. Однако это показывает арабские буквы в нем. этот текстовый файл был сгенерирован некоторой программой (у меня нет информации о), но кажется, что существует некоторое внутреннее кодирование (если я мог бы сказать и если это возможно) для арабских букв для создания, появляются.

Есть что-то такое? В противном случае, как файл ANSI может показать арабские буквы?

*Если возможно объясните в коде Java


Выпуск 01

Когда я открываю его в Блокноте ++, это показывает, что кодированием страницы является ANSI. Проверьте эту фотографию:

http://www.4shared.com/file/221862075/e8705951/text-Windows.html


Выпуск 02

можно проверить файл в от:

http://www.4shared.com/file/221853641/3fa1af8c/data.html

5
задан Yacoby 14 February 2010 в 16:08
поделиться

6 ответов

Я попробовал открыть файл и в Firefox, и в Opera. Мне пришлось установить кодировку символов на Arabic Windows-1256, чтобы он корректно отображался в обоих браузерах, так что кодировка файла, скорее всего, такая.

ПРИМЕЧАНИЕ: Изначально я разместил это как комментарий, но меня попросили сделать его ответом.

3
ответ дан 18 December 2019 в 09:49
поделиться

Как узнать, что это кодировка ANSI? Если это не многобайтовая кодировка, такая как UTF-8, я предполагаю, что она закодирована с использованием арабской кодовой страницы, подобной этой: Windows-1256 .

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

4
ответ дан 18 December 2019 в 09:49
поделиться

Краткий ответ : Вероятно, ваш текстовый файл закодирован не в формате ANSI, а в utf-8.

Длинный ответ :

Во-первых, термин «ANSI» (в Windows) не означает фиксированную кодировку; его значение зависит от ваших языковых настроек. Например, в Западной Европе и США это обычно будет Windows-1252 (вариант ISO / IEC 8859-1, также известный как latin-1 ), в Японии, это SHift JIS , а в арабских странах это ISO / IEC_8859-6 .

Если вы используете неарабскую версию Windows и не изменили языковые настройки, и вы можете видеть арабские буквы в файле, когда вы открываете его в Блокноте, то он определенно не входит ни в одну из этих кодировок ANSI. Вместо этого, вероятно, это Unicode .

Обратите внимание, что я не имею в виду «UNICODE», который в Windows обычно означает UTF-16LE . Это также может быть UTF-8 . Обе являются кодировками, которые могут кодировать все 100 000+ символов, определенных в настоящее время в Unicode, но делают это по-разному. Оба являются кодировками переменной длины , что означает, что не все символы кодируются с использованием одинакового количества битов.

В UTF-8 каждый символ кодируется от одного до четырех байтов. Кодировка выбрана так, что символы ASCII кодируются одним байтом.

В UTF-16 каждый символ кодируется двумя четырьмя байтами. Эта кодировка была первоначально изобретена, когда Unicode имел менее 64 КБ символов, и поэтому можно было закодировать каждый символ в одном 16-битном слове. Позже, когда стало ясно, что Unicode должен вырасти за предел 64 КБ, была изобретена схема, в которой пары слов в диапазоне 0xD800-0xDFFF используются для представления символов за пределами первых 64 КБ (минус 0x800) символов.

Чтобы увидеть, что на самом деле находится в файле, откройте его в шестнадцатеричном редакторе:

  • Если первые два байта - это FF FE, то, скорее всего, это UTF-16LE (little endian)
  • Если первые два байта - это FE FF, то, скорее всего, это UTF-16BE (с прямым порядком байтов, маловероятно в Windows)
  • Если первые три байта - EF BB BF, то, скорее всего, это UTF-8
  • Если вы видите много 00 байтов, это, скорее всего, UTF-16 (или UTF-32, если вы видите пары из 00 байтов)
  • Если арабские символы занимают один байт, это, скорее всего, ISO-8859-6 (например, ش будет D5).
  • Если арабские символы занимают несколько байтов, это, скорее всего, UTF-8 (например, ش будет D8 B4).
4
ответ дан 18 December 2019 в 09:49
поделиться

Есть такая вещь?

Нет.

Если нет, то как в файле ANSI могут отображаться арабские буквы?

Это не файл в кодировке Windows-ANSI. Скорее всего, он использует кодировку переменной ширины , скорее всего, UTF-8: многие общие позиции символов в UTF-8 эквивалентны своим позициям в US-ASCII (фактически, он был разработан таким образом), а также для Windows-ANSI.

РЕДАКТИРОВАТЬ : Мы должны поблагодарить Microsoft за эту путаницу. Когда дело доходит до кодировок, термин «ANSI» не совсем точно определен. Обычно это означает кодировку Windows по умолчанию с кодовой страницей 1252 («Windows-1252»), которая соответствует «западным» алфавитам, производным от латыни.

Однако в других странах кодировка по умолчанию, используемая Windows (в более старых версиях Windows… сегодня по умолчанию используется UTF-8), составляет , а не Windows-1252, а другая кодировка, которая тогда также называется «ANSI». В данном случае кодовая страница 1256.

4
ответ дан 18 December 2019 в 09:49
поделиться

Кодировка символов ANSI позволяет использовать 217 символов и не содержит арабских букв. Думаю, возможно, в файле используется альтернативная кодировка.

Отвечая на ваше редактирование, кажется, что проблема связана с Notepad ++, потому что то, что отображается, явно выходит за рамки возможностей кодировки ANSI.

1
ответ дан 18 December 2019 в 09:49
поделиться

сначала я скачал ваш файл и попытался использовать vim, чтобы проверить его кодировку, но он, похоже, не знал, а на второй машине он сказал latin1, что может быть похоже на то, что произошло в notepad++ (дал общий ответ).
file data.txt, и на выходе получилось следующее:

data.txt: ISO-8859 text, with CRLF line terminators

надеюсь, это поможет.

EDIT:
использование браузера показало, что этот ответ неверен.

ISO-8859-4 и ISO-8859-13 могли отобразить текст без ошибок, но символы были не арабскими.

1
ответ дан 18 December 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: