C 日本語文字列のソースを表示
新しいページはコチラ
移動:
案内
,
検索
※このページではC言語にも存在していたという意味で記事タイトルがC 日本語文字列になっていますが、<br /> [[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br /> <br /> == '''日本語文字列''' == char型の配列で1byte、1文字を表現できるascii文字コードというものを使っていましたが、<br /> 問題点はいくつかありますが、そのままでも日本語全角文字は表現できます。日本語文字コードは2Byteで表現されます。<br /> 全角のアルファベットからカタカナ、ひらがな、漢字、記号、あまり使わない漢字を含めて65536種類を00 00からFF FFまで<br /> で表現しています。最初の1byteが0x80~0x9F、0xE0~0xFCならばasciiコードでは定義していないため、その後ろの1byteも読み込んで1文字だと処理してくれます。<br /> マルチバイト文字と呼んでいます。asciiコードですでに使われている部分は使えないとしても、日本語文字コードは15616種類を使えます。これでも十分です。<br /> <br /> 問題点1は文字数と配列の大きさが一致しないことです。<br /> 加えて、0x80 0x5cのように2byte文字コードの中に0x5cが登場すると、0x5c='\'ですので、次の文字はエスケープシーケンスだとみなされ<br /> 2byteずつ出力してくれる手順より優先して、その次にくる文字の1byteの処理をしようとします。この結果文字化けが発生します。2byte文字の下位byteに0x5cが<br /> 登場するのは、以下のような文字です。<br /> ―,ソ,Ы,Ⅸ,噂,浬,欺,圭,構,蚕,十,申,曾,箪,貼,能,表,暴,予,禄,兔,喀,媾,彌,拿,杤,歃,濬,畚,秉,綵,臀,藹,觸,軆,鐔,饅,鷭,偆,砡,纊,犾<br /> 普段使わない文字が多いですが、使いそうなのは―,ソ,Ⅸ,噂,欺,圭,構,蚕,十,申,曾,貼,能,表,暴,予,といったあたりでしょうか。使う使わないは、それぞれの立場で異なるので、<br /> そういった分類は意味を成しませんが、ともかくこれらの文字が出てきたらエスケープシーケンスを打ち切るために'\\'という形にすればよく、<br /> 十\個,表\示,能\力とかにする手法があります。これは面倒過ぎる。<br /> <br /> このような問題から、日本語をそのままchar型でマルチバイト文字列として扱うのはよろしくないということがわかります。<br /> ※0x5cをみつけたら、もう一個\を加える処理とか、マルチバイトの先頭にくる文字コードが来たら2byteで1文字とか計算したりして、昔はこのままつかってたんですけどね。<br /> <br /> それで、解決策は?<br /> <br /> 実はいくつかありまして…。どれがいいとか悪いとかは、それぞれなんですけど…あの~その~面倒ですが、そのいくつかを紹介しようかと思います。<br /> 「おいおい…一つにしてよ。どうすればいいかわからんやん。」という声が聞こえてきますが、全くその通りなんですけど、いまだに宙に浮いている問題でして、<br /> 統一まではできないかと思います。<br /> でも一番いいのはこれってのはあります。でも、それはそれで、「そんなことせなあかんの?話が違う、帰るわ!」って思われるかもしれません。<br /> マルチバイト文字列、ワイド文字列、
C 日本語文字列
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ