2012-05-09 1 views
2

Я использую cygwin на Win7-64bit, а с настройкой «zh_CN.UTF-8» - по умолчанию. Иногда, некоторые из выходов из Cygwin просто не может быть считан с плохим кодированием, как следующим образом:Некоторые из выходов из cygwin просто не могут быть прочитаны с плохой кодировкой?

[junit] ▒▒▒▒: ▒Ҳ▒▒▒▒▒▒޷▒▒▒▒▒▒▒▒▒ can't 

Любая идея? Благодарю.

+0

Просто получить решение. http://cygwin.com/faq-nochunks.html#faq.using.weirdchars Измените параметры терминала в тексте, выберите набор символов как «GBK». – sharajava

ответ

5

Хотя шарахава нашла решение самостоятельно, я должен сказать, что это решение не очень предпочтительно, по крайней мере, для меня. Проблема в том, что вы изменили параметры терминала в тексте («CharSet» от mintty на самом деле) до «GBK», что отображают символы UTF-8 на экране? Они будут беспорядочным, нечитаемым кодом. Я экспериментировал на VIM, будь то текст китайского приветствия или кодированный UTF-8 исходный код, включая китайские символы, отображается как нечитаемый код. Это неприемлемо для меня или, как я полагаю, для большинства людей.

Наконец-то я выяснил способ обойти недостаток командной строки Windows (т. Е. cmd.exe) и включить mintty выполнение команд DOS без ущерба для грязных кодов. Вот мое решение и может быть полезно.

Тестирование среды:
ОС: Win7 64-бит китайский упрощенный
Cygwin: 64-разрядные
Командная строка: по умолчанию кода страницы 936

Конфигурация:

  • Установить локаль Cygwin до zh_CN.UTF-8, поскольку большинство желающих
  • Добавить Locale=zh_CN и Charset=UTF-8 в .minttyrc ma король mintty использование UTF-8 в качестве выходного кодирования
  • Добавить cmd /c chcp 65001 в .bashrc

Теперь вы можете запускать команды DOS, как ipconfig, taskkill, help.exe и format.com и т.д. непосредственно на mintty, даже в компаньона с Линукс команд таких как less, grep. Каждый раз, когда вы входите в bash, он скажет вам, что Active code page: 65001 означает, что выходная кодировка cmd.exe была временно изменена на UTF-8.

Когда код страницы cmd.exe изменен на 65001, cmd.exe больше не будет использовать китайский язык в качестве текста подсказки (на английском языке), а китайские каталоги также не поддерживаются. Это дефект cmd.exe и не имеет ничего общего с mintty. Каким-то образом mintty удаляет выходные китайские символы, которые cmd.exe с cp65001 не могут. Я не могу это объяснить, так или иначе, это работает.

Чтобы установить локаль Cygwin, вы можете добавить следующий код в .bashrc:

export LC_ALL=zh_CN.UTF-8 
export LC_CTYPE=zh_CN.UTF-8 
export LANG=zh_CN.UTF-8 

Смотрите также:
Unicode characters in Windows command line - how?
My application prints international characters but I only see gray boxes

+0

Наконец-то я нашел решение, спасибо. Я могу подтвердить, что он работает также для win 7 со шведским кодированием ('sv_SE.UTF-8'), но мне не нужно устанавливать' LC_ALL или LC_CTYPE', что они пусты, 'LANG' установлен на' sv_SE.UTF -8' by cygwin из установки. – 244an

Смежные вопросы