From: Tomohiro K. <tk...@ri...> - 2002-03-19 16:58:38
|
久保田です。 At Tue, 19 Mar 2002 01:10:08 +0900, Tomohiro KUBOTA wrote: > curses を使うと、mlterm が文字化けします。ncurses の責任かも > しれないので、そちらで試していただけないでしょうか。 原因が分かりました。terminfo の、 enacs=\E)0 というのが、悪さをしているっぽいです。これは、alternate character set を使う準備で、これを使っておいて、それから smacs=^N と rmacs=^O を使うと、alternate character set が表示されるというものです。 これは、たとえば、罫線文字の表示などに使われているようです。 ちなみに、terminfo(5) によると、 snacs は enable alternate character set smacs は start alternate character set rmacs は end alternate character set で、 Glyph ACS Ascii VT100 Name Name Default Name ------------------------------------------------------------------ solid square block ACS_BLOCK # 0 とのことです。 ところで、この機構は、じつは ISO-2022 の G1 をそのまま使っている のです。\E)0 は、G1 に「0」を指示するエスケープシーケンスで、 ^N と ^O はそれぞれ SO と SI です。 それで、文字化けをどう解決したらいいか、ですが、これが難しい問題です。 というのは、ISO-2022 を正しく解釈すれば、文字化けが必然的に起こって しまうからです。 1. 「0」で示される alternate character set はサポートせず、無視する。 また、SI/SO もサポートしない。 こうすると、罫線文字は化けますが、日本語が化けるよりはましです。 (というか、いま現在、罫線文字はサポートされていない)。 2. 「0」など、ISO-2022 で通常使われない文字集合については、G1 では なく、特別な場所 (G4 とか?) に指示する。SI/SO は G1 ではなく G4 を呼び出すようにする。 などの解決方法が考えられますが、ISO-2022-CN や ISO-2022-KR で SI/SO が使われているので、だめです。 ちなみに、kterm は一見きちんと動いていますが、 TERM=xterm dialog --msgbox あいうえお 8 20 としてやると、ダメダメです。hanterm はきちんと動きます。 さて、どうしましょう? --- 久保田智広 Tomohiro KUBOTA <ku...@de...> http://www.debian.or.jp/~kubota/ "Introduction to I18N" http://www.debian.org/doc/manuals/intro-i18n/ |