Я побежалСукаXна трех разных ОС Linux, потому что на двух из них (Linux OpenSUSE 11.4 и BackTrack 5 R1) при использовании yakuake/konsole (OpenSUSE) и terminator/tilda (BT 5 R1) я получил этот странный � (вопросительный знак).
Однако на PuppyLinux Lucid 528 с RoxTerm символ отображается так, как и должен (это греческий символ "fi"). Теперь, как на SUSE, так и на BT, я проверил значение $LC_CTYPE, и оно такое же, как в Puppy Linux (а именно en_US, то есть без кодировки utf-8).
Я экспериментировал и на SUSE, и на BT с разными кодировками символов (из настроек терминала), я заметил изменения, но текст все равно иногда искажался, вместо вопросительного знака я получал какие-то странные непонятные «u» (в Puppy они всегда отображаются правильно).
Что может быть причиной этой раздражающей проблемы?
Что может отличаться и как я могу проверить разницу?
решение1
Здесь происходит несколько вещей.
Можете ли вы сначала убедиться, что это LC_CTYPE=en_US
действительно означает «без utf-8»?
Функция nl_langinfo
может помочь, например:
$ python
>>> import locale
>>> locale.setlocale(locale.LC_CTYPE, 'en_US')
'en_US'
>>> locale.nl_langinfo(locale.CODESET)
'ISO-8859-1'
Во-вторых, было бы полезно попробовать изменить только одну переменную за раз. Например, если RoxTerm работает в PuppyLinux, будет ли он работать в OpenSUSE и/или BackTrack? И можете ли вы также сказать, какую версию BitchX
вы используете, если это имеет значение?
Наконец, IRC на самом деле не предоставляет никакой информации о кодировке символов, поэтому сервер и все пользователи на канале должны согласовать кодировку символов. Я думаю, что в наши дни большинство пользователей используют UTF-8, так что, может быть, вам стоит попробовать изменить настройки на UTF-8?
ОБНОВЛЯТЬ
Вы сказали, что BitchX не поддерживает UTF-8.
Тогда, я думаю, у вас возникнут проблемы в общении с другими пользователями.
Но если все остальные говорят по-гречески, а также используют BitchX, то, возможно, вам стоит использоватьНабор греческих символов ISO-8859-7.
В моей системе единственные две локали, которые изначально поддерживают ISO-8859-7, — это греческие языки, например el_GR.iso88597
.
Запустите locale -a
, чтобы просмотреть полный список доступных вариантов, и выберите тот, который включает этот набор символов.
решение2
Вопросительный знак в ромбе, скорее всего, означает, что ваша клиентская программа принимает символ и передает его в движок отображения (я прав, что bitchX — это только терминальная программа?), но терминал не может его отобразить. Так что, скорее всего, проблема в конфигурации терминала — например, выбранный шрифт не содержит глифов для греческих символов. Вы можете проверить это, скопировав и вставив из этого терминала в другой, запустив что-то вроде «hexdump -C» — это покажет кодовую точку phi (U+03C6, то есть `CF 86' в hexdump utf-8). Если это так, попробуйте выбрать шрифт, который поддерживает греческий.
Видеть что-то вроде \u03C6, и т. д. означает, что, скорее всего, локаль сломана (не Unicode), поэтому клиент принимает символы, применяет к ним обработку Unicode, но затем не может вывести их напрямую и переключается в резервный режим. Так что, я полагаю, настройки SuSE и BT имеют en_US как псевдоним для кодировки, отличной от Unicode, вероятно, ISO-8859-1. Попробуйте установить en_US.UTF-8 напрямую и сравните результаты.