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

StackOverflow https://stackoverflow.com/questions/2260986

Вопрос

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

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

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


Издание 01

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

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


Издание 02

Вы можете проверить файл по адресу:

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Что-то подобное существует?

Нет.

Если нет, то как файл 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.

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

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

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

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

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

РЕДАКТИРОВАТЬ:
использование браузера показало, что этот ответ неверен.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top