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

解決


ぺぺ  2005-11-15 03:55:15  No: 59569

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

char   TEXT={abcあいう};


みい  2005-11-15 04:26:08  No: 59570

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


Blue  2005-11-15 05:12:51  No: 59571

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

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

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

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


みい  2005-11-15 05:43:34  No: 59572

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

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


ぺぺ  2005-11-15 19:55:41  No: 59573

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

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

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

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


  2005-11-15 21:49:10  No: 59574

_ismbclegal は?


Blue  2005-11-15 23:37:31  No: 59575

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

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

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


ぺぺ  2005-11-16 04:43:29  No: 59576

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加