外出自粛中でも楽しく過ごす!QAまとめ>>

EUCでダブルバイト文字の1バイト目と、そうでない普通のEUCの文字とを
区別することはでますか?
もしできたら、EUCのダブルバイト文字の1バイト目の領域を教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

EUCには、2バイト文字の他に3バイト文字もあります。


各文字のコード範囲は、以下の通りです。

2バイト文字
・1バイト目  0x8E , 0xA1 ~ 0xFE
・2バイト目  0xA1 ~ 0xFE

3バイト文字
・1バイト目  0x8F
・2バイト目  0xA1 ~ 0xFE
・3バイト目  0xA1 ~ 0xFE

すべて ASCIIコード(0x00 ~ 0x7F)以外で構成されているわけですが、ほとんどの部分でコード範囲が重複しています。
このため、「ある文字列のnバイト目が、何バイト文字の何バイト目か」を判別するには、文字列先頭からチェックをするしかありません。
    • good
    • 1
この回答へのお礼

ありがとうございます。
日本語の文字数に対応した処理をすることができました。
3バイト文字があるなんて初めて知りました。
先頭からチェックしないとうまくいかないようですね。

お礼日時:2003/02/16 22:41

こちらが参考になりませんか。


http://euc.jp/i18n/charcode.ja.html

参考URL:http://euc.jp/i18n/charcode.ja.html
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q半角、全角の判別方法

100バイトの領域の半角、全角を含む文字列のから
40バイトを取得したいのですが、最後は文字化けにならないように
したいのですが、どうやればいいでしょうか?

strncpy(testBefore,testAfter,40);
とかやってみましたが案の定文字化けになってしまいました。

半角の文字コードを全て定義しておき、最後がそれになっていないか比較するという方法以外に何か手はありますでしょうか?

文字コードはEUCです。
宜しくお願いします。

Aベストアンサー

半角文字は最上位ビットを見ればわかるので定義しなくても判別は出来ます。
問題は40バイト目が全角文字(最上位ビットが1)の場合にそれが1バイト目なのか2バイト目なのか3バイト目(補助漢字は3バイトになるのがEUCの欠点ですね)なのかの判断が出来ないことです。
例えば"aいいいい"という文字列はEUC-JPでは
0x61, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4
になります。
結局、文字列の最初から1バイトずつ順番にチェックしていくしかないのではないでしょうか。

QC++でEUC-JPをSJISに変換したい。

C++で、ライブラリなど使わずにcsvファイルの文字コードEUC-JPをSJISに変換しようと試行錯誤しましたができませんでした。

googleなどで検索したのですが、なかなかうまくいかず手詰まり気味で投稿させていただきました。
16進数の値で調整するのは理解したのですが、ファイル全部を一括でする方法が導き出せませんでした。Linuxのiconvコマンドみたいにさっくりできたら良いのですが、C++だと難しく・・・。
ご存知の方、ご教示を宜しくお願いします。

環境はLinuxのC++で変換するプログラムです。

Aベストアンサー

EUC-JPからシフトJISへの変換であれば、計算でできます。
コードを貼ってもよいのですが、先人の成果物がありますので、それを紹介しておきます。

http://oku.edu.mie-u.ac.jp/~okumura/algo/
↑にある『C言語による最新アルゴリズム事典』に、skanji.cというソースファイルがあります。
これは、JISコードからシフトJISに変換するものですが、JISコードの第1、第2バイトにそれぞれ0x80を加えればEUC-JPになりますので、ほんの少しの改造で何とかなるはずです。
あと、これはCのソースですが、C++でもほぼそのまま使えるはずです(念のため)。


人気Q&Aランキング