2バイト目が5C等になりうることによる問題
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/08 07:39 UTC 版)
「Shift_JIS」の記事における「2バイト目が5C等になりうることによる問題」の解説
表: JIS X 0208で2バイト目に5C16を持つ文字一覧文字符号(16進)読み・字義文字化け例― 815C ダッシュ ソ 835C そ (片仮名) ソフト→ャtト Ы 845C ウィ (キリル文字) 噂 895C ソン、うわさ 噂話→汚b 浬 8A5C リ、かいり、ノット 欺 8B5C ギ、あざむ-く 詐欺師→詐去t 圭 8C5C ケイ 錦織圭など→錦織撃ネど 構 8D5C コウ、かま-える 構成→告ャ 蚕 8E5C サン、かいこ 養蚕業→養視ニ 十 8F5C ジュウ、とお (漢数字の10) 十人十色→署l署F 申 905C シン、もう-す、さる 申請→瑞ソ、 申込み→錐桙ン 曾 915C ソ、ひ (「曽」の旧字) 曾孫→荘キ、 曾祖父→荘c父 箪 925C タン (「簞」の簡易慣用字体) 箪笥→註y 貼 935C チョウ、は-る 貼り付け→唐阨tけ 能 945C ノウ、よ-く、あた-う 能力→迫ヘ、 可能性→可柏ォ 表 955C ヒョウ、おもて、あらわ-す 表示→侮ヲ、 代表的→代蕪I 暴 965C ボウ、バク、あば-れる 暴力→沫ヘ、 暴露→迄I 予 975C ヨ、あらかじ-め、かね-て 予算→落Z、 予想→卵z 禄 985C ロク 元禄X年→元蝋年 兔 995C ト、うさぎ (「兎」の異体字) 喀 9A5C カク、キャク、は-く 喀血する→嚮撃キる 媾 9B5C コウ 媾和→尨a (「講和」の非書換え) 彌 9C5C ミ、ビ、や (「弥」の旧字) 和泉元彌など→和泉元怩ネど 拿 9D5C ダ 拿捕する→摯゚する 杤 9E5C とち (「栃」の異体字) 歃 9F5C ソウ、ショウ、すす-る 血を歃って→血を氓チて 濬 E05C シュン、さら-う 長谷川濬など→長谷川烽ネど 畚 E15C ホン、ふご、もっこ 畚に乗る→痰ノ乗る 秉 E25C ヘイ、ヒン、と-る 秉燭→竦C 綵 E35C サイ、あや 動植綵絵→動植繩G 臀 E45C デン、しり 臀部など→苺狽ネど 藹 E55C アイ 和気藹々→和気蛛X 觸 E65C ショク (「触」の旧字) 軆 E75C タイ (「体」の異体字) 鐔 E85C タン、つば 金鐔焼き→金闖トき 饅 E95C マン 饅頭→體ェ 鷭 EA5C バン (鳥の名) 鷭の群れ→黷フ群れ Shift_JISでは、カタカナの「ソ」、漢字の「噂」など一部の文字の2バイト目に、5C16を使用している。この符号はJIS X 0201では円記号、ASCIIなどではバックスラッシュに該当し、多くのプログラミング言語(C、Perl、Bourne Shellなど多数)ではエスケープ文字と扱う。したがって、ソースコードや文字データの処理においてShift_JISを想定していないプログラミング環境では問題が起こる。この問題は、同じように2バイト目の範囲に5C16を含むBig5や、まれではあるがGBKなどの文字コードでも発生しうる。 また、5C16以外についても類似の問題が発生することがある。 2バイト目が7C16になる文字(「ポ」「芸」など)。この符号はASCIIでは|(バーティカルバー)に該当する。UnixやMS-DOSなどのシェル上でこの符号はパイプ記号と認識され、これらの文字を含むファイルは正常に操作できない。 2バイト目が5B16(「ゼ」「深」など)、5D16(「ゾ」「転」など)になる文字。これらの符号はASCIIでは[, ]に該当する。そのためこれらの文字は正規表現と組み合わせて使うことができない。 このようなASCII約物と同じ符号を含むためにプログラム上で不具合を起こしうるマルチバイト文字を俗に「だめ文字」あるいは「ダメ文字」と呼ぶ。 この問題を回避する伝統的な方法として、以下のようなものがある。 ソースコード全体をEUC-JPやUTF-8などのGL領域と混用のない符号に変換し、実行またはコンパイルする(例:Perl のencodingプラグマ)。 5Cを含む文字列を扱う場合、「ソ」→「ソ\」のようにダメ文字の直後にエスケープ文字を挿入することで目的の符号列として認識させる(例:PerlのSjisソフトウェアやJavaScript)。 文字または文字列として扱わず対象文字および内部表現形式を数値の配列として変換を行い、取り扱う際に文字に復号して扱う(例:PerlのEncodeモジュール)。 文字化け例 マルチバイト非対応環境では、Shift_JISの「構わない」という文字列は「高墲ネい」または「高筲ネい」に文字化けすることがある。後の文字の2バイト目が半角カナ「ネ」として認識されるため、「い」でデコードが再同期され、後の文字列は正常に表示される。 構わない8d 5c 82 ed 82 c8 82 a2 ▼エスケープ文字にあたる5cが抜けた場合 8d 82 ed 82 c8 82 a2 高墲ネい また、同様に「芸能界」という文字列は「芸矧E」に文字化けする。 芸能界8c 7c 94 5c 8A 45 ▼エスケープ文字にあたる5cが抜けた場合 8C 7c 94 8A 45 芸矧E
※この「2バイト目が5C等になりうることによる問題」の解説は、「Shift_JIS」の解説の一部です。
「2バイト目が5C等になりうることによる問題」を含む「Shift_JIS」の記事については、「Shift_JIS」の概要を参照ください。
- 2バイト目が5C等になりうることによる問題のページへのリンク