• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:LinuxでCursesライブラリを使って半角カナが上手く制御できない)

LinuxでCursesライブラリを使って半角カナが制御できない

punchan_jpの回答

回答No.1

半角カナでなく、ASCII 文字なら問題ないのでしょうか? 出力する文字コードと kterm の文字コードの設定として 何を使っているでしょうか? EUC を使っているとすると、半角カナは2バイトで表現されますから、 ちゃんと日本語化された curses でないと正しく扱えないかもしれません。 あとは、kterm のバグが考えられますが、この場合、script コマンドによって curses がどのような出力をしているかの生の情報を収集できます。 script を起動して、すぐ問題のコマンドを動かし、おかしくなっ た時点ですぐ終了させて、script も exit で抜けておきます。 そうすれば、typescript というファイルに、それまでに出力され たバイト列が生成されます。これを適当な方法で解析してください。 うまくいく場合といかない場合の両方を調べて比較するといいかもしれません。 このファイルが巨大でなければ、cat -vt してここに掲載してもらえれば、 調べてみますけど。

nabezo-
質問者

補足

punchan_jp さん、回答ありがとうございました。 ご質問に対してお答えします。 #長くなっちゃったけど大丈夫かなぁ。。。 >半角カナでなく、ASCII 文字なら問題ないのでしょうか? ・ASCII 文字、全角文字なら問題ありません。 >出力する文字コードと kterm の文字コードの設定として >何を使っているでしょうか? ・出力コードはEUCです。 kterm の文字コードの設定というのは、LANG、LC_ALL のことで いいのでしょうか。 どちらも ja_JP.ujis となっていました。 >EUC を使っているとすると、半角カナは2バイトで表現されますから、 >ちゃんと日本語化された curses でないと正しく扱えないかもしれません。 ・データは2バイトですが、1バイト分で表示されています。 ちゃんと日本語化された curses ライブラリかどうか判断することは できますか? 6.1 でのリンクは以下のようになっていました。 libcurses.so -> libncurses.so libncurses.so -> libncurses.so.4 libncurses.so.4 -> libncurses.so.4.2 libncurses.so.4.2 : (1999 Sep 24 274985byte) ちなみに 6.2 でも同じ現象になりました。 実体は libncurses.so.4.0 (2000 Mar 7 262884 byte) でした。 >あとは、kterm のバグが考えられますが、この場合、script コマンドによって >curses がどのような出力をしているかの生の情報を収集できます。 >script を起動して、すぐ問題のコマンドを動かし、おかしくなっ >た時点ですぐ終了させて、script も exit で抜けておきます。 >そうすれば、typescript というファイルに、それまでに出力され >たバイト列が生成されます。これを適当な方法で解析してください。 >うまくいく場合といかない場合の両方を調べて比較するといいかもしれません。 参考までに、簡単なプログラムを以下に載せておきます。 -------------------- ここから -------------------- #include <curses.h> main() { char tbl_1[80]; char tbl_2[80]; int cnt, cnt2; int mojiCnt = 10; initscr(); clear(); memset(tbl_1, '\0', 80); memset(tbl_2, '\0', 80); for (cnt = 0, cnt2 = 0; cnt < mojiCnt; cnt++) { tbl_1[cnt2] = 0x8E; tbl_2[cnt2] = 0x8E; cnt2++; tbl_1[cnt2] = 0xB1; tbl_2[cnt2] = 0xB2; cnt2++; } mvprintw(10, 16, "%s", tbl_1); mvprintw(11, 16, "%s", tbl_2); refresh(); endwin(); } -------------------- ここまで -------------------- 質問を出した後、いろいろ試しましたが、以下の条件が影響すると わかりました。 ・書き出すY座標 ・表示する文字数 ・kterm のライン数 プログラムで、文字数(mojiCnt)、Y座標(mvprintw 関数の第2パラメータ)を 変更したり、kterm のライン数を変えてテストしました。 例えば上記プログラムは、ライン数:24、カラム:80 の kterm で実行すると NGですが、ライン数を 25 にするとOKでした。 また、ライン数:24、カラム:80 のままで、座標を (10,15) と (11,15) と したらOKでした。 データ長にも影響しているらしく、各行2文字ずつ表示した場合、Y座標が 2以下ならOKで、3以上がNGでした。 各行3文字の場合は、Y座標が3以下がOKで、4以上だとNGでした。 (ライン数:24、カラム:80) Windows のマシンから「TeraTerm」というソフトで telnet して試しましたが 同じ現象が発生しました。 この場合は、LANG、ロケールは ja_JP.eucJP です。 なので curses の問題だとは思うのですが、原因が全く推測できません。 >このファイルが巨大でなければ、cat -vt してここに掲載してもらえれば、 >調べてみますけど。 お時間が許されるならば、よろしくお願いします。 以下が cat の結果とダンプデータです。 cat の結果をファイルに落として vi で見たところ、NGとなった (1) の 場合は1行目の表示と2行目の表示のデータの部分は別の行となっていましたが OKの場合は1行目の表示と2行目の表示のデータの部分は同じ行として つながっていました。 ダンプデータを見ると確かに (1) は 1行目のデータの後ろに 0x0A の 改行コードがあり、(2)、(3) では0x0A の改行コードがありませんでした。 (1)上記プログラムを実行(ライン数:24、カラム:80) 結果=>NG <cat -vt データ> [nabe@upsx3 testkana]$ cat -vt type16-24 M-%M-9M-%M-/M-%M-jM-%M-WM-%M-HM-$M-O Wed Apr 4 15:47:27 2001 M-$M-KM-3M-+M-;M-OM-$M-7M-$M-^M-$M-7M-$M-?[nabe@upsx3 testkana]$ a.out^M ^[7^[[?47h^[[1;24r^[[m^[[4l^[[H^[[2J^[[11;17HM-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1 ^[[20DM-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2^[[24;1H^[[2J^[[?47l^[8^M^[[?1l^[>[nabe@upsx3 testkana]$ exit^M exit^M M-%M-9M-%M-/M-%M-jM-%M-WM-%M-HM-$M-O Wed Apr 4 15:47:45 2001 M-$M-KM-=M-*M-NM-;M-$M-7M-$M-^M-$M-7M-$M-?[nabe@upsx3 testkana]$ <ダンプデータ> 00000000 A5 B9 A5 AF A5 EA A5 D7 A5 C8 A4 CF 20 57 65 64 00000010 20 41 70 72 20 20 34 20 31 35 3A 34 37 3A 32 37 00000020 20 32 30 30 31 0A 20 A4 CB B3 AB BB CF A4 B7 A4 00000030 DE A4 B7 A4 BF 5B 6E 61 62 65 40 75 70 73 78 33 00000040 20 74 65 73 74 6B 61 6E 61 5D 24 20 61 2E 6F 75 00000050 74 0D 0A 1B 37 1B 5B 3F 34 37 68 1B 5B 31 3B 32 00000060 34 72 1B 5B 6D 1B 5B 34 6C 1B 5B 48 1B 5B 32 4A 00000070 1B 5B 31 31 3B 31 37 48 8E B1 8E B1 8E B1 8E B1 00000080 8E B1 8E B1 8E B1 8E B1 8E B1 8E B1 0A 1B 5B 32 00000090 30 44 8E B2 8E B2 8E B2 8E B2 8E B2 8E B2 8E B2 000000A0 8E B2 8E B2 8E B2 1B 5B 32 34 3B 31 48 1B 5B 32 000000B0 4A 1B 5B 3F 34 37 6C 1B 38 0D 1B 5B 3F 31 6C 1B 000000C0 3E 5B 6E 61 62 65 40 75 70 73 78 33 20 74 65 73 000000D0 74 6B 61 6E 61 5D 24 20 65 78 69 74 0D 0A 65 78 000000E0 69 74 0D 0A 0A A5 B9 A5 AF A5 EA A5 D7 A5 C8 A4 000000F0 CF 20 57 65 64 20 41 70 72 20 20 34 20 31 35 3A 00000100 34 37 3A 34 35 20 32 30 30 31 0A 20 A4 CB BD AA 00000110 CE BB A4 B7 A4 DE A4 B7 A4 BF (2)上記プログラムを実行(ライン数:25、カラム:80) 結果=>OK <cat -vt データ> [nabe@upsx3 testkana]$ cat -vt type16-25 M-%M-9M-%M-/M-%M-jM-%M-WM-%M-HM-$M-O Wed Apr 4 15:49:58 2001 M-$M-KM-3M-+M-;M-OM-$M-7M-$M-^M-$M-7M-$M-?[nabe@upsx3 testkana]$ a.out^M ^[7^[[?47h^[[1;25r^[[m^[[4l^[[H^[[2J^[[11;17HM-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1^[[12;17HM-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2^[[25;1H^[[2J^[[?47l^[8^M^[[?1l^[>[nabe@upsx3testkana]$ exit^M exit^M M-%M-9M-%M-/M-%M-jM-%M-WM-%M-HM-$M-O Wed Apr 4 15:50:13 2001 M-$M-KM-=M-*M-NM-;M-$M-7M-$M-^M-$M-7M-$M-?[nabe@upsx3 testkana]$ <ダンプデータ> 00000000 A5 B9 A5 AF A5 EA A5 D7 A5 C8 A4 CF 20 57 65 64 00000010 20 41 70 72 20 20 34 20 31 35 3A 34 39 3A 35 38 00000020 20 32 30 30 31 0A 20 A4 CB B3 AB BB CF A4 B7 A4 00000030 DE A4 B7 A4 BF 5B 6E 61 62 65 40 75 70 73 78 33 00000040 20 74 65 73 74 6B 61 6E 61 5D 24 20 61 2E 6F 75 00000050 74 0D 0A 1B 37 1B 5B 3F 34 37 68 1B 5B 31 3B 32 00000060 35 72 1B 5B 6D 1B 5B 34 6C 1B 5B 48 1B 5B 32 4A 00000070 1B 5B 31 31 3B 31 37 48 8E B1 8E B1 8E B1 8E B1 00000080 8E B1 8E B1 8E B1 8E B1 8E B1 8E B1 1B 5B 31 32 00000090 3B 31 37 48 8E B2 8E B2 8E B2 8E B2 8E B2 8E B2 000000A0 8E B2 8E B2 8E B2 8E B2 1B 5B 32 35 3B 31 48 1B 000000B0 5B 32 4A 1B 5B 3F 34 37 6C 1B 38 0D 1B 5B 3F 31 000000C0 6C 1B 3E 5B 6E 61 62 65 40 75 70 73 78 33 20 74 000000D0 65 73 74 6B 61 6E 61 5D 24 20 65 78 69 74 0D 0A 000000E0 65 78 69 74 0D 0A 0A A5 B9 A5 AF A5 EA A5 D7 A5 000000F0 C8 A4 CF 20 57 65 64 20 41 70 72 20 20 34 20 31 00000100 35 3A 35 30 3A 31 33 20 32 30 30 31 0A 20 A4 CB 00000110 BD AA CE BB A4 B7 A4 DE A4 B7 A4 BF (3)上記プログラムを (10,15) (11,15) から書き出すように修正して実行 (ライン数:24、カラム:80) 結果=>OK <cat -vt データ> [nabe@upsx3 testkana]$ cat -vt type15-24 M-%M-9M-%M-/M-%M-jM-%M-WM-%M-HM-$M-O Wed Apr 4 15:51:54 2001 M-$M-KM-3M-+M-;M-OM-$M-7M-$M-^M-$M-7M-$M-?[nabe@upsx3 testkana]$ a.out^M ^[7^[[?47h^[[1;24r^[[m^[[4l^[[H^[[2J^[[11;16HM-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1M-^NM-1^[[12;16HM-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2M-^NM-2^[[24;1H^[[2J^[[?47l^[8^M^[[?1l^[>[nabe@upsx3testkana]$ exit^M exit^M M-%M-9M-%M-/M-%M-jM-%M-WM-%M-HM-$M-O Wed Apr 4 15:52:05 2001 M-$M-KM-=M-*M-NM-;M-$M-7M-$M-^M-$M-7M-$M-?[nabe@upsx3 testkana]$ <ダンプデータ> 00000000 A5 B9 A5 AF A5 EA A5 D7 A5 C8 A4 CF 20 57 65 64 00000010 20 41 70 72 20 20 34 20 31 35 3A 35 31 3A 35 34 00000020 20 32 30 30 31 0A 20 A4 CB B3 AB BB CF A4 B7 A4 00000030 DE A4 B7 A4 BF 5B 6E 61 62 65 40 75 70 73 78 33 00000040 20 74 65 73 74 6B 61 6E 61 5D 24 20 61 2E 6F 75 00000050 74 0D 0A 1B 37 1B 5B 3F 34 37 68 1B 5B 31 3B 32 00000060 34 72 1B 5B 6D 1B 5B 34 6C 1B 5B 48 1B 5B 32 4A 00000070 1B 5B 31 31 3B 31 36 48 8E B1 8E B1 8E B1 8E B1 00000080 8E B1 8E B1 8E B1 8E B1 8E B1 8E B1 1B 5B 31 32 00000090 3B 31 36 48 8E B2 8E B2 8E B2 8E B2 8E B2 8E B2 000000A0 8E B2 8E B2 8E B2 8E B2 1B 5B 32 34 3B 31 48 1B 000000B0 5B 32 4A 1B 5B 3F 34 37 6C 1B 38 0D 1B 5B 3F 31 000000C0 6C 1B 3E 5B 6E 61 62 65 40 75 70 73 78 33 20 74 000000D0 65 73 74 6B 61 6E 61 5D 24 20 65 78 69 74 0D 0A 000000E0 65 78 69 74 0D 0A 0A A5 B9 A5 AF A5 EA A5 D7 A5 000000F0 C8 A4 CF 20 57 65 64 20 41 70 72 20 20 34 20 31 00000100 35 3A 35 32 3A 30 35 20 32 30 30 31 0A 20 A4 CB 00000110 BD AA CE BB A4 B7 A4 DE A4 B7 A4 BF 以上

関連するQ&A

  • 半角カナから全角カナへ

    お世話になります。 今、フォームから入力された半角カナを全角カナへ変換しようとしているのですが、どうしてもうまく行きません。 処理は以下のようにしています。 jcode::convert(\$str, 'euc'); if($str =~ /[\xA1-\xDF]/){ jcode::h2z_euc(\$str); } (1)まず、半角カナが含まれているかのチェックで[\xA1-\xDF]を使用していますが色々調べたところ、実際は (?:\x8E[\xA6-\xDF]) が正しいようなのですが、この場合文字数が少ないとひっかかってくれません。例えば半角のア1文字や2文字など。また、文字数が多くても半角英数と半角カナが混在しているとひっかからない場合もあります。 上記の式だとひっかかってくれますが、この判定で構わないのでしょうか。 (2)上記の式できちんと置換されるものとされないで漢字のように文字化けするものと出てきてしまいます。 例えば「インターフェース」などという半角は全滅です。 「バージョン」などは大丈夫でした。 間違いなど教えて頂ければと思います。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 半角カナに悩まされております・・・。

    こんばんは! 度々質問させて頂いておりますイインンフォフォと申します。 さて早速質問に移ります。 DBより半角カナの抽出は出来たのですが更新をした場合に文字化けになります。 ピーナッツと言う半角カナのカテゴリがありそこにある情報を取得→更新と言う形です。 全角にしたらいいと言うご意見もあるかと思います。 全角にすると別なプログラムも狂ってしまうので半角でしかダメみたいです。 ピーナッツを抽出→表示 はOKです。 でも内容を更新すると→[ピーナッツ]が文字化けです。 フォームのプルダウンメニューから cate='$pr[4]' と言う形でインサート及び更新をしています。 抽出の時点では半角カナで表示されていて更新作業をすると化けてしまいます。 文字化けした場合、管理画面からカテゴリの訂正をしなければなりません。 DB→EUC-JP PHPファイル→SJIS となっております。 なぜでしょうか!! ご教授願います(*^-^*)

    • ベストアンサー
    • PHP
  • 半角英数が入力できなくなってしまいました。半角カナしか打てません

    Windos2000の環境です。 何故か半角英数での入力が半角カナになってします。 ログイン画面でユーザ名を入力しようとすると半角英数が打てずに困っています。 とりあえず設定をチェックしてみると 入力モードは"直接入力"になってします。 変換モードは"一般(I)"になっています。 入力設定はかな入力になっています。特に変わった所は見当たらないのですが何故か半角カナになってしまいます。 その際、右下は「_A」と表示されています。 [半角/全角]キーを押すと「あ」となって問題なくひらがな入力はできます。 どうすれば半角英数を入力出来るようになるのでしょうか?

  • 携帯サイトでの半角カナについて

    現在携帯サイトを作っているのですが、半角カナを使用すると、キャリアによってその文字部分が空白になってしまって、文字が表示されなかったり、またリンク先で半角カナを使っているとリンク先にジャンプできなかったりとエラーが幾つかでてきます。 半角カナを使ったほうが文字数も減るし、何よりパケ代の節約になるので是非使用したいのですが、何か設定方法などあるのでしょうか? どなたか教えて下さい!お願いしますっ!!

  • エクセル_関数_半角カナを全角にしたいのですが。

    お尋ねします。 半角カナを全角カナに変換しようと、エクセル関数のJISを使いました。 ところが、1つのセルに255文字までなら正常に変換ができるのですが、256文字以上になると、#VALUEでエラーとなります。 昔のバージョンが低いエクセルでは、1つのセルに255文字までしか入らなかった記憶があるのですが、エクセル2007では、一つのセルに255文字以上登録しているセルもあり、文字が途中で切れているようには見えません。 関数LENを使って調べてみますと、300文字入ったセルもあります。 しかし、その300文字入ったセルを関数の引数とした場合に上記のようなエラーになってしまいます。 「255文字以上のセルは分割してすればいいじゃないか」とのお声もあるかとともいますが、分割はせずに半角カナの入ったセルを全角カナに置き換えることはできないでしょうか。 よろしくお願いします。

  • Access 各カラムの中に半角カナが含まれているか検索

    いつもお世話になっております。 現在、Accessに、10テーブル、合計100カラム、データ数20万件程度入っております。 その中から、半角カナが含まれるテーブル名、カラム名を抽出したいのですが、このようなことは可能でしょうか。 条件として、1文字でも含まれておれば抽出対象としていただきたいです。 現在は、ひとつひとつEXCELに抽出し、半角カナを全角カナに変換してEXACT関数でFALSEのものを探しています。 今回、Accessをもっと有効に使いたいと思い投稿をさせていただきました。 よろしくお願いします。

  • 平仮名になっているのに、何故半角英数表示?

    よく、表示は全角カナになっているのに、実際に打つと半角英数になってしまうことがあります。かなりの頻度です。なんででしょうか? 皆さんのPCもそう? 回避する方法は、打ち直しでしょうか?? 

  • 全角文字を半角文字に変換する部品はありますか?

    画面入力された文字の内、全角の英、数、カナ、(、)、%など半角に出来るものは半角文字に変換する部品を探しています。 ご存知の方は教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 【Access2003】のクエリにて、半角数字のみを取得したいのですが

    【Access2003】のクエリにて、半角数字のみを取得したいのですが。 とあるカラムに字名が入っています。 "1丁目" "5丁目" "8丁目" "八事" …… このような感じで全角及び半角数字と漢字及びかなが混在しています。 その中から、数字だけを半角にして取り出したいのです、 どんな関数をどのように駆使すればよろしいでしょうか? 上記の場合ですと、 "1" "5" "8" "" …… としたいのですが。 よろしくお願いします。

  • EXCELでPHONETICカナ変換で「ゑ」

    EXCELの関数、PHONETICを使って、漢字のフリガナを出してみたのですが、 「ゑ」の文字のカナが「ヱ」(全角)で表示されてしまいました。 ざっと見たところ、他の文字はちゃんと入力した漢字の読みが表示 されているのですが、なんで「ゑ」だけは「エ」(半角)でなく、しかも「エ」(全角)ではなく、旧字?の「ヱ」なのでしょうか? もしかしてウィルスかなにか?と思ったり、バグ?と思ったり。 誰か直し方を知っている人がいたら、教えていただきたいのですが。 宜しくお願いします。