Текстовый файл Unicode/UTF-8: тарабарщина на консоли Windows (попытка отображения иврита)

У меня есть файл с широким символом (с текстом на иврите), который отлично выглядит в "Блокноте" (сохранен в "кодировке UTF-8" ), отлично читается в Notepad ++, а когда я копирую и вставляю в MS Word, он выглядит отлично слишком. Но когда я открываю "ящик DOS" (консоль Windows) и иду: "type file.txt", он печатает тарабарщину.
И да, я сделал все рекомендации для Unicode на консоли Windows: я открыл консоль используя "cmd/u", я изменил шрифт на Lucida, и я ввел: "chcp 65001".

Проблема идентична на ПК под управлением Windows 7 и на другом ПК под управлением Windows XP SP3.

Ответ 1

Шрифт Courier New поддерживает иврит и может быть добавлен в командную строку. По умолчанию шрифты - консола, lucida, растровые, ни один из них не поддерживает иврит. Поэтому добавьте Courier New в командную строку.

Это взлом реестра, чтобы сделать это

http://www.howtogeek.com/howto/windows-vista/stupid-geek-tricks-enable-more-fonts-for-the-windows-command-prompt/

http://www.techrepublic.com/blog/windows-and-office/quick-tip-add-fonts-to-the-command-prompt/

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

Lucida и Consolas являются дефолтами.
Растр по умолчанию не указан здесь, может быть, потому что это TTF
Из всего этого я попытался добавить, только 3 добавлены (поддерживаются cmd)
Courier New, DejaVu Sans Mono, Droid Sans Mono

DejaVu Sans Mono и Droid Sans Mono доступны для загрузки, поддерживаются cmd, могут иметь хорошую поддержку/символы в Unicode, но не включают иврит

введите описание изображения здесь

У меня

Consolas <-- default
Courier New  <--- added
DejaVu Sans Mono  <-- added
Droid Sans Mono  <-- added
Lucida Console <-- default
Raster Fonts <-- default

Обычными ивритскими шрифтами являются Мириам и Дэвид, но они не могут быть добавлены в командную строку.

Для записи Babelmap может отображать все шрифты в вашей системе, которые поддерживают иврит, например. в babelmap-click fonts..font cover, затем введите 05D0 (это алеф). Я думаю, что все эти шрифты существуют при установке по умолчанию Windows 7

Aharoni, Arial, Courier New, David, FrankRuehl, Gisha, Levenim MT, Lucida Sans Unicode, Microsoft Sans Serif, Miriam, Miriam Fixed, Narkisim, Rod, Segoe WP, Tahoma, Times New Roman

Но большинство или все эти шрифты с ивритом не поддерживаются в командной строке, кроме Courier New. Фактически, полная остановка шрифтов не поддерживается в командной строке, даже "раз новый роман" (потому что "раз новый роман" не является монослоем/фиксированной шириной и что один из нескольких критериев для него поддерживается, другие критерии кажутся более неясными).

Итак, теперь вы можете добавить и выбрать Courier New для использования в командной строке.

введите описание изображения здесь

И поэтому вы можете вставлять символы юникода в cmd, если выбранный шрифт поддерживает его.

введите описание изображения здесь

Чтобы скопировать/вставить, нажмите кнопку "Копировать" в charmap

Теперь он в буфере обмена

Чтобы вставить его в командную строку, в win7 вставить в командной строке не ctrl-v. Вы щелкаете правой кнопкой мыши и выбираете пасту. (или в режиме быстрого вызова, затем просто щелкните правой кнопкой мыши)

введите описание изображения здесь

Это главное.

Дополнительно

Часто в окнах можно использовать блокнот и карту символов.. но нужно знать некоторые ограничения с ними.

Карта символов отображает первые 65536 символов юникода, когда выбранный вами шрифт поддерживает его, а карта символов показывает код UTF-16. Это нормально, вы все равно можете вставлять карту символов в окно cmd.exe, но вы должны знать, что команды, запущенные в cmd.exe, и каналы не поддерживают utf-16. Таким образом, вы можете использовать карту символов, найти символ, например. aleph 05d0, но стоит посмотреть на символ http://www.fileformat.info/info/unicode/char/05d0/index.htm и увидеть, что, хотя код utf-16 равен 05d0, utf-8 код - d790. Команда команды и файла xxd полезна для просмотра реального содержимого файла и определения типа файла.

Блокнот немного ограничен, когда дело доходит до unicode или любого символа в наборе символов Юникода, код UTF16 которого → FF. И cmd немного ограничен в отношении некоторых команд типа "type", а также для каналов и перенаправления.

Если вы используете cmd.exe, вам действительно нужны трубы для работы. Труды соков важны.

Трубы ограничены кодировками, которые могут быть указаны командой CHCP.

(Обратите внимание: если CHCP сообщает вам, что вы находитесь на определенной кодовой странице, например 850, она сообщает вам кодировку ввода. Если вы запустите команду chcp 850, она изменит кодировку ввода и вывода. Обычно они одинаковы. Это проще, если они одинаковы. Но если вы использовали какую-либо другую программу для изменения кодировки cmd, например, у С++-компилятора есть переключатель, который его изменяет, тогда лучше всего изменить его с помощью chcp, чтобы вы знали, что оба кодирования установлены).

Существует CHCP 1200 (UTF-16LE) и 1201 (UTF-16BE), но ни один из них не поддерживается, если вы попробуете его, он скажет неверную кодовую страницу (проверенную в win7). CHCP не поддерживает UTF-16 (он не поддерживает UTF16LE или UTF16BE). Существует CHCP 65001 (это UTF-8 без спецификации). И есть CHCP 862 (старомодный способ, как в дни MSDOS, кодирования иврита, о котором я упоминал)

Команда типа поддерживает UTF16LE, как и блокнот (какой блокнот вызывает Unicode, UTF-16 LE), но каналы и перенаправление не поддерживают это. Команда type также поддерживает любую кодовую страницу, указанную/поддерживаемую CHCP. Таким образом, типы поддерживают 862 или 65001.

Итак, вы можете использовать блокнот, чтобы сохранить его как UTF8 (который есть с спецификацией), а затем скриптируйте, чтобы удалить спецификацию. (Это немного перехитрить).. Или вы могли бы использовать блокнот, сохранить его как Unicode UTF 16LE.. Но тогда вы не можете подавать в суд на трубы.. (что плохо). Самое простое занятие - использовать текстовый редактор вроде notepad2 или notepad ++, который поддерживает UTF8 без спецификации.

Или, если вы все делаете с cmd, вы можете использовать 862 или 65001. Хотя многие текстовые редакторы могут не поддерживать хорошую поддержку 862. Таким образом, вы можете предпочесть 65001.

Если вы хотите записать какой-либо файл в блокнот и у него есть символ, который больше, чем в UTF16, называется \uFF, и вы хотите запускать команды в cmd.exe в этом файле, тогда некоторые команды (например, тип команда), будут иметь проблемы, если вы не будете учитывать то, что поддерживается.

Блокнот поддерживает UTF-16BE, UTF-16LE и UTF-8 с спецификацией. Это нехорошо. И нет необходимости возиться с xxd и sed или другими командами, чтобы удалить спецификацию. Если у вас есть файл с так называемым символом юникода, символ за пределами обычного диапазона ascii. Симвul > UTF-16\uFF, как показано символьной картой как > \uFF, затем используйте Notepad2 или notepad ++

Тип поддерживает UTF16LE и любую кодировку, установленную CHCP, например. 65001 или 862.

Трубы и перенаправление идут на все, что установлено CHCP.

Codepage 862 является старым, поэтому Codepage 65001 - хороший способ пойти.

xxd и файл полезны для просмотра того, как кодируется файл, который может быть полезен, если у вас есть проблемы. Но не обязательно.

Итак, если вы хотите написать файл для использования в CMD, и у него есть некоторые символы Unicode, в то время как у вас есть такие команды, как xxd и sed, которые могут быть использованы для удаления спецификации и других команд для этого. Самый простой способ сделать такой файл в текстовом редакторе - использовать текстовый редактор, например notepad2 или notepad ++, который поддерживает UTF8 без спецификации.

Получение отображения на иврите может быть самым важным, что нужно сделать сначала, как описано выше. И следующая вещь - возможность сохранять файлы в текстовом редакторе, который вы можете отображать, например. 'тип'.

И если вы когда-нибудь захотите скопировать из командной строки, если не в режиме быстрого вызова, затем щелкните правой кнопкой мыши, затем выберите значок, затем выберите его, затем нажмите ENTER. И чтобы вставить правый клик и выбрать вставить.

Еще одна дополнительная точка -

По-видимому, в chcp 65001 есть ошибки, в которых некоторые пакетные файлы не запускаются, и, возможно, некоторые C-программы тоже не будут работать. Как использовать символы Unicode в командной строке Windows? И я даже видел резкий сбой компилятора cd, когда cmd находится в кодовой странице 65001 (хотя можно обвинить c-компилятор c, можно также обвинить 65001) Почему сбой csc.exe, когда я последний раз оставил выходную кодировку как UTF8?

Примечание. В более ранней версии этого ответа были некоторые примеры командной строки, но они были излишне сложными. Я мог бы в какой-то момент добавить некоторые команды, демонстрирующие то, что я описывал, но это довольно тривиально.

Ответ 2

/u для UTF-16LE, а не UTF-8. Вот почему сохранение файла в виде UTF-16LE (то, что Windows/Notepad вводит в заблуждение "Unicode" ) и работает с /u, работает, насколько это возможно.

UTF-8 должен быть достигнут с помощью chcp 65001, но есть некоторые неприятные ошибки низкого уровня в Microsoft C Runtime для этой кодовой страницы, что делает некоторые приложения ненадежными, а некоторые не запускаются вообще.

Так что да, извините, но UTF-8 является гражданином второго сорта под Windows. Все, что использует интерфейсы ANSI для ввода-вывода, включая все, что использует стандартную IO-библиотеку C, включая командную строку, не сможет справиться с ней должным образом.

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

В любом случае, даже если у вас есть право на кодировку, вам все равно придется иметь шрифт в командной строке, который содержит нужные вам символы. Я считаю, что именно поэтому вы все еще не получаете иврита в маршруте /u + UTF-16LE.

Сводка: Командная строка + не-ASCII == почти наверняка сбой. Откажитесь и найдите другой интерфейс, который вы можете использовать, который поддерживает Unicode лучше.

Ответ 4

Я предполагаю, что вы имеете в виду "Lucida Console", когда вы говорите "Lucida".

Используя приложение charmap, я не смог найти в шрифте ивритские символы. Я не знаю, был ли шрифт более способным в более ранних версиях Windows, но в Windows 7 не было ничего за пределами европейских символов.

В моей системе также есть пишущая машинка Lucida Sans, которая включает ивритские символы. К сожалению, окно Cmd не отображает его как выбор. Вам нужно отредактировать реестр, чтобы открыть больше вариантов, как показано в этом вопросе на SuperUser: https://superuser.com/questions/5035/how-to-change-the-windows-console-font

P.S. Я не смог проверить это решение, потому что Windows сложно. См. https://superuser.com/questions/390933/how-to-add-a-font-to-the-cmd-window-choices-in-windows-7-64-bit

Ответ 5

Как получить установку XP на иврите?

Прежде всего, речь идет о XP home SP3, иврит включен. Под этим я подразумеваю, что это стандартная установка XP US, или, я полагаю, с добавлением возможностей иврита для клавиатуры и дисплея. Я считаю, что каждый компакт-диск XP может установить такую ​​систему. В частности, я считаю, что для такой системы необходимо следующее:

  • Панель управления → Дата, время, язык и региональные параметры → Язык и региональные параметры → на вкладке Язык: 1) Нажмите "Подробности" и добавьте ивритскую клавиатуру. 2) отметьте в V установочные файлы для сложных script и справа налево (включая тайский) вариант.
  • Панель управления → Дата, время, язык и региональные параметры → Язык и региональные параметры → вкладка Дополнительно: Примите, отметьте V, 10004 (MAC - арабский) и 10005 (Mac - иврит). Не уверен, что арабский должен быть здесь.

Теперь в консоли cmd

Нужно явно добавить шрифты Courier New в консольный реестр шрифтов, как описано выше. В противном случае явные ивритские шрифты не будут отображаться.

Теперь, когда консоль cmd открывается, все, что нужно сделать для ввода символов на иврите, это включить шрифты Courier New и сменить клавиатуру на иврит. С Windows прокрутить языки, которые он имеет для клавиатуры, легко. Либо повторное нажатие левой клавиши Alt в сочетании с левыми клавишами сдвига, либо с помощью мыши.

В качестве альтернативы, команда dir будет показывать имена файлов с ивритскими символами. Однако нельзя просто выпустить

dir file_name

и посмотреть обычный выход, если файл начинается с буквы на иврите. Это должно быть

dir *file_name

Я предполагаю, что символ звездочки добавляет символ Unicode спецификации.

Можно также открыть Блокнот, ввести ивритские символы, сохранить файл как UTF8 и запустить в командах консоли следующее:

chcp 65001
type that_Notepad_file_I_saved

Сохранение файла, как UTF8, выполняется на экране сохранения блокнота.