C2A0文字コードはUTF-8の半角スペース

C2A0文字コードはUTF-8の半角スペースのことです。

とある案件で、データベース上に文字化けした値があったので、テキストに貼り付けてみるとスペースにしか見えませんでした。

C2A0は半角スペースにしか見えない

スペースにしか見えないと思いつつ、文字化けする以上は何かあるだろうと文字コードを確認してみると、あれ? C2A0 と出ましたね。

スペースは20じゃなくてC2A0だった

むむむ、半角スペースは 20 のはずだが C2A0 とはこれいかに・・?

ここでは C2A0文字コードについて解説 します。


C2A0はノーブレークスペース

調べていくと、どうやら C2A0 は UTF-8 の半角スペース というか NO-BREAK SPACE(ノーブレークスペース) というもので、HTMLでいう アンパサンド と同様の特殊文字でした。

文字通りそこでは改行しないスペースという意味で、通常の半角スペースとは別物です。

利用者に問い合わせたところ、どうやらどこかのサイトからコピペしたものがデータベース上に登録されたようですね。通常の半角スペースに置換したところ、特に文字化けすることもなくなりましたので、ここからは JavaでC2A0を通常のスペースに置換する方法 を紹介します。

JavaでC2A0を通常の半角スペース(20)に置換

Javaで C2A0 を通常の半角スペース(20)に置換します。正規表現を使って、こんな感じのソースを書いてください。

value 変数には C2A0 を含んだ文字列をセット

value.replaceAll("[\xc2\xa0]", " ");

実行結果です。見た目に変化はありませんね。

C2A0を20に置換しても見た目に変化はない

文字コードを確認してみると、半角スペース(20)に置換されたことが確認できました。

半角スペース(20)に置換された

PHPでC2A0を通常の半角スペース(20)に置換

ちなみに、PHPで C2A0 を通常の半角スペース(20)に置換する方法はこんな感じです。

$content = str_replace( "xc2xa0", " ", $content );

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。