終端字符編碼問題 BitchX

終端字符編碼問題 BitchX

我跑了母狗X在三個不同的L​​inux 作業系統上,因為我在其中兩個(Linux OpenSUSE 11.4 和BackTrack 5 R1)上使用yakuake/konsole (OpenSUSE) 和terminator/tilda (BT 5 R1) 得到了這個奇怪的�(問號)。

然而,在帶有 RoxTerm 的 PuppyLinux Lucid 528 上,該字元按其應有的方式顯示(它是希臘字元「fi」)。現在,在 SUSE 和 BT 上,我都檢查了 $LC_CTYPE 的值,它與 Puppy Linux 中的值相同(即 en_US,因此沒有 utf-8 編碼)。

我已經在SUSE 和BT 上用不同的字符編碼(來自終端的設置)進行了實驗,我注意到了這些變化,但文本有時仍然是亂碼,而不是問號,我得到了一些奇怪的難以理解的“u ”-s(在 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,因此utf-8 的hexdump 中的“CF 86”) 。如果是這樣,請嘗試選擇支援希臘語的字體。

看到類似 \u03C6 等的內容意味著可能的語言環境已損壞(不是 Unicode),因此客戶端接受字符,對它們應用 Unicode 處理,但隨後無法直接輸出它們並切換到回退模式。因此,我猜 SuSE 和 BT 設定都將 en_US 作為非 Unicode 編碼的別名,可能是 ISO-8859-1。嘗試直接設定en_US.UTF-8並比較效果。

相關內容