マルチバイト判定する方法

解決


ぺぺ  2005-11-14 18:55:15  No: 59569  IP: 192.*.*.*

以下のようなプログラムを組んだ場合、
TEXT配列の何番目の要素がマルチバイトであるか判定したいのですが。
どなたかご教授ください。
OSはWindowsとは異なりRed Hat Linuxですが、
よろしくお願いいたします。

char   TEXT={abcあいう};

編集 削除
みい  2005-11-14 19:26:08  No: 59570  IP: 192.*.*.*

マルチバイト文字の第1バイトの値(0x81〜0x9F/0xE0〜0xFCだったかしら)
がないか文字バイト数分for文回してTEXTの中身を見てみるとか。

編集 削除
Blue  2005-11-14 20:12:51  No: 59571  IP: 192.*.*.*

> TEXT配列の何番目の要素がマルチバイト
n番目の文字を調べるのにも、必ず先頭から順番に見ていく必要があります。

その環境に合わせた文字コードで一番バイト目をみて判定するしかないですね。
ちなみに、みいさんの
> (0x81〜0x9F/0xE0〜0xFCだったかしら)
はSfit_JISですね。

Red Hat LinuxはEUCか、UTF-8だったでしょうか?


> char   TEXT={abcあいう};
これは文字列ではないですね。
char TEXT[] = "abcあいう";
でないと。

編集 削除
みい  2005-11-14 20:43:34  No: 59572  IP: 192.*.*.*

> Red Hat LinuxはEUCか、UTF-8だったでしょうか?
あ、そうですね(^_^;)ゞ。確かEUCだったような気が。
Blueさん、フォローありがとうございます。

とりあえず、文字コードに関するリンク貼り付けっと。
http://ash.jp/code/code.htm

編集 削除
ぺぺ  2005-11-15 10:55:41  No: 59573  IP: 192.*.*.*

みいさん、Blueさんご回答ありがとうございます。
マルチバイトに規則性がある事をはじめて知りました。
お恥ずかしいばかりです。

文字コードなのですが、EUCかshiftJIS を指定してから
マルチバイトの判定をしたいのですが、
なにか良い関数ございませんでしょうか?

確か記憶の中ではsetlocale()してからある関数をCALLして
判定できたような気がします。

よろしくお願いいたします。

編集 削除
 2005-11-15 12:49:10  No: 59574  IP: 192.*.*.*

_ismbclegal は?

編集 削除
Blue  2005-11-15 14:37:31  No: 59575  IP: 192.*.*.*

よくわかならいのですが、
VC上で _ismb〜で
コンパイルしたものをLinuxに持ってて上手くいくのでしょうか?
コンパイル時にはその環境のコードになるだけで、実行時に切り分けれるのかなぁ。。。と。

> マルチバイト判定する方法
ってのはどうしても文字コードに依存してしまう気がシマス。


内部では、すべての文字コードをShift_JISとして判定し、
その文字コードを扱うときにどんなコードでも Shfit_JIS に変換して処理するようにすれば、
文字列処理 と 文字コード変換処理 と別々に管理できて良いと思います。
(文字コードが変われば、"文字コード変換処理"だけを修正・改造)

編集 削除
ぺぺ  2005-11-15 19:43:29  No: 59576  IP: 192.*.*.*

Blueさん、ご丁寧にありがとうございます。
Blueさんのアドバイスのような処理を
検討したいと思います。ありがとうございました。m(__)m

編集 削除