全角から半角へ:数字とコードの認識エラーを直す
日本語入力からコピーした数字は見た目は普通でも、プログラムに拒否されることがあります。全角と半角は別の符号で、数値として扱われるのは片方だけです。
本当に必要になる場面
数字が典型的です。全角の123は 123 と見分けが付きませんが符号が異なるため、表計算では文字列になり、スクリプトでは解析に失敗し、検索でも一致しません。日本語環境からコピーした電話番号や金額、商品コードがこの状態になりがちです。
コードやコマンドも同じです。全角の空白、括弧、セミコロンをソースに貼ると構文エラーになりますが、目では見つけにくいものです。古い文書や PDF、チャットからコピーした英字と記号を整えるときにも必要です。
- 表計算で文字列になった全角数字
- 日本語文書からコピーした番号と金額
- コードに混ざった全角の空白と括弧
変換の範囲と副作用
変換は符号の範囲で決まります。全角 ASCII の U+FF01 から U+FF5E は 0xFEE0 を引いた半角になり、表意スペース U+3000 は通常のスペースになります。漢字、仮名、半角カタカナは範囲外なので変わりません。
範囲内の全角記号も変わります。全角カンマ U+FF0C、全角ピリオド U+FF0E、感嘆符、疑問符、括弧は ASCII になります。日本語の 、と 。は U+3001 と U+3002 で影響を受けません。全角スペースが半角になると、段落の字下げも消えます。
- 全角英数字は 0xFEE0 を引くと半角になる
- U+3000 は通常のスペースになる
- 、と 。は変換範囲の外
代替手段と使わない場面
数字だけを直したいなら表計算の置換や VALUE 関数、入力方法を揃えたいだけなら入力モードの切り替えで足ります。日本語の本文は数字と英字だけ半角にし、句読点は全角のままが一般的なので、全文をまとめて変換するのは乱暴です。
逆に、全角入力を求めるフォームでは半角から全角への変換を使います。どちらも文脈を読まない機械的な符号の変換なので、コード、パスワード、URL を扱う前には控えを取ってください。
よくある質問
全角の数字がプログラムで認識されないのはなぜですか?
全角と半角の数字は別の Unicode 符号で、見た目が似ていても値が違うためです。多くの解析処理は ASCII の 0-9 だけを受け付け、全角は文字として扱うかエラーにします。
変換したら日本語の句読点も変わりました。元に戻せますか?
全角カンマ、ピリオド、感嘆符、疑問符は変換範囲に入るため ASCII になります。、と 。は範囲外でそのままです。組版に必要なら戻すか、数字だけを変換してください。
漢字や仮名は影響を受けますか?
受けません。変換は U+FF01 から U+FF5E と U+3000 のスペースだけが対象で、漢字、ひらがな、カタカナはそのまま残ります。
関連ツール:全角から半角へ変換