日本語って面倒くさいな

知ってる人にとっては当たり前の事なんだけれど、例えば次のようなプログラムを書いてみます。

main(){
  printf( "%c" , 0x81 );
  printf( "A¥n" );
}

このプログラムを実行すると、文字化けした文字が1文字表示され、Aという文字はどこにも見当たらない。ターミナルの文字コードがシフトJISなら句読点”、”が表示される。

Aという文字の手前に0x81に該当する文字を出すと2バイト文字と認識されて文字化けを起こします。

この場合、Aのコードは0x41なので、手前に0x81を表示させると2バイト文字の0x8141に該当する文字が表示される。

2バイト文字の事を知っていれば何ともないのですが、初心者の人にこのコードを実行させると「何故?どうして?」という顔をする。

練習問題として、変数sに代入されている文字列からAという半角文字を検索してそのポインタをptに代入せよなんて問題を出した時、これを知らないとシフトJISの句読点”、”が何故かヒットしたりして、本気で混乱するでしょう。
(まぁ、練習問題で日本語を入力させる意地悪な人はそんなに居ないでしょうけど)

なので、全角混じりに文字列から半角文字を探すときは必ず1つ手前の文字のコードをチェックする必要があります。

こんな事を考えていると「あぁ、日本語って面倒くさい…」と思う。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。