以下のようなプログラムを組んだ場合、
TEXT配列の何番目の要素がマルチバイトであるか判定したいのですが。
どなたかご教授ください。
OSはWindowsとは異なりRed Hat Linuxですが、
よろしくお願いいたします。
char TEXT={abcあいう};
マルチバイト文字の第1バイトの値(0x81〜0x9F/0xE0〜0xFCだったかしら)
がないか文字バイト数分for文回してTEXTの中身を見てみるとか。
> TEXT配列の何番目の要素がマルチバイト
n番目の文字を調べるのにも、必ず先頭から順番に見ていく必要があります。
その環境に合わせた文字コードで一番バイト目をみて判定するしかないですね。
ちなみに、みいさんの
> (0x81〜0x9F/0xE0〜0xFCだったかしら)
はSfit_JISですね。
Red Hat LinuxはEUCか、UTF-8だったでしょうか?
> char TEXT={abcあいう};
これは文字列ではないですね。
char TEXT[] = "abcあいう";
でないと。
> Red Hat LinuxはEUCか、UTF-8だったでしょうか?
あ、そうですね(^_^;)ゞ。確かEUCだったような気が。
Blueさん、フォローありがとうございます。
とりあえず、文字コードに関するリンク貼り付けっと。
http://ash.jp/code/code.htm
みいさん、Blueさんご回答ありがとうございます。
マルチバイトに規則性がある事をはじめて知りました。
お恥ずかしいばかりです。
文字コードなのですが、EUCかshiftJIS を指定してから
マルチバイトの判定をしたいのですが、
なにか良い関数ございませんでしょうか?
確か記憶の中ではsetlocale()してからある関数をCALLして
判定できたような気がします。
よろしくお願いいたします。
_ismbclegal は?
よくわかならいのですが、
VC上で _ismb〜で
コンパイルしたものをLinuxに持ってて上手くいくのでしょうか?
コンパイル時にはその環境のコードになるだけで、実行時に切り分けれるのかなぁ。。。と。
> マルチバイト判定する方法
ってのはどうしても文字コードに依存してしまう気がシマス。
内部では、すべての文字コードをShift_JISとして判定し、
その文字コードを扱うときにどんなコードでも Shfit_JIS に変換して処理するようにすれば、
文字列処理 と 文字コード変換処理 と別々に管理できて良いと思います。
(文字コードが変われば、"文字コード変換処理"だけを修正・改造)
Blueさん、ご丁寧にありがとうございます。
Blueさんのアドバイスのような処理を
検討したいと思います。ありがとうございました。m(__)m
ツイート | ![]() |