調べて分かる道具箱

全角・半角の変換

変換する対象

住所の番地だけ半角にしたいときは「英数字」だけを選びます。 一括で全部変換すると、 カタカナまで半角になって別の直しが必要になります。

まだ何も入っていません。貼り付けると、半角と全角の両方を同時に出します。

半角にする

(ここに結果が出ます)

0文字 / UTF-8 0バイト

全角にする

(ここに結果が出ます)

0文字 / UTF-8 0バイト

よくある質問

英数字だけを半角にして、カタカナは全角のままにできますか?

できます。「変換する対象」で英数字だけを選んでください。住所の番地や電話番号だけを半角に直したいとき、一括変換だとカタカナまで半角になってしまい、直しが二度手間になります。

半角カナの「ガ」は正しく「ガ」になりますか?

なります。半角カナの濁点は「カ」と「゙」の2文字で書かれるため、単純に1文字ずつ置き換えると「カ゛」と濁点が離れた形になります。この計算機は濁点つきの組み合わせを先に処理して、1文字の「ガ」に合成します。

なぜ全角と半角の2種類があるのですか?

日本語を表示するために、漢字やひらがなを英数字の2倍の幅で並べた歴史があります。文字を等幅で桁揃えする画面では、漢字1文字と英数字2文字の幅を揃える必要がありました。その名残で、同じ「A」に全角と半角の2つの文字が存在します。

申込フォームで半角を求められるのはなぜですか?

システム側で全角と半角を別の文字として扱うためです。全角の「123」は、半角の「123」とは異なる文字なので、そのままでは数値として計算できません。入力を受け取った側で変換する仕組みがない場合、利用者に半角での入力を求めることになります。

変換したあとの文字数も知りたいのですが

結果の下に、変換後の文字数と UTF-8 でのバイト数を表示しています。全角を半角にしても文字数は変わりませんが、バイト数は減ります。桁数の制限がバイト単位で決まっている場合はそちらを見てください。

NFKC とは何ですか?

Unicode の正規化の1つで、互換分解のあとに正準合成を行う形です。全角の「A」は互換分解で「A」に戻り、半角の「カ」は「カ」に戻るので、英数字は半角、カタカナは全角に一度に揃います。全角英数だけを半角にしたいときは、カタカナも一緒に変わる点に気をつけてください。

全角スペースは半角にできますか?

できます。「変換する対象」で空白を選んでください。全角空白(U+3000)は Unicode で半角空白(U+0020)の幅広の形として登録されていて、見た目は空いているだけでも別の文字です。検索や照合が一致しないときは、ここが原因のことがあります。

変換する対象を英数字・カタカナ・記号・空白から選べます。半角と全角の両方を同時に出します。

一括変換で困る場面

全角半角の変換が必要になるのは、たいてい「システムに合わせて直す」ときです。 そして直したいのは文章全体ではなく、その一部だけであることがほとんどです。

住所を例にすると、「東京都渋谷区○○1丁目2番3号 サンプルマンション101」のような文字列で 直したいのは番地の数字と、半角カナのマンション名です。ここで一括変換をかけると、 番地は半角になっても住所のカタカナまで半角になり、逆に全角へ一括すると マンション名は直っても番地が全角に戻ります。どちらにしても手直しが残ります。

だからこの計算機は、変換の対象を選べるようにしています。 英数字だけ半角、カタカナだけ全角、という2回の操作で目的の形になります。

半角カナの濁点が壊れる理由

半角カナには濁点つきの文字がありません。「ガ」は「カ」と「゙」の2文字で書き表します。 全角に直すときは、この2文字を見つけて1文字の「ガ」に置き換える必要があります。

1文字ずつ順に置き換える実装では、先に「カ」が「カ」になってしまい、 あとに残った「゙」が単独の記号として「カ゛」の形で残ります。 見た目は似ていますが別の文字列なので、検索や照合が一致しなくなります。 この計算機は濁点・半濁点つきの組み合わせを先に処理することで、この問題を避けています。

全角と半角は、Unicode では「互換文字」

Unicode には Halfwidth and Fullwidth Forms(U+FF00〜U+FFEF)というブロックがあり、 全角の英数字と記号、半角のカタカナと句読点が並んでいます。全角の「A」には <wide> 0041 という分解が付いていて、「本体は A で、これはその幅広の形」という意味です。半角の「カ」は逆に <narrow> 30AB で、本体は全角の「カ」です。つまり英数字は半角が本体で全角が写し、カタカナは全角が本体で半角が写し、 という向きになっています。

全角と半角の対と、Unicode の符号位置
種類全角半角
英字A U+FF21A U+0041
数字0 U+FF100 U+0030
記号! U+FF01! U+0021
空白  U+3000 U+0020
カタカナカ U+30ABカ U+FF76

全角の英数字と記号は、半角の符号位置に FEE0(16進)を足した位置に順に並んでいます。 この計算機の英数字の変換は、その差を足し引きしているだけです。全角空白だけは離れた場所(U+3000)にあり、<wide> 0020 で半角空白に対応づけられています。 旧来の文字コードでは半角を 1 バイト、全角を 2 バイトで表すことが多く、Unicode 標準付属書 #11 は「1/2 em 幅の文字を半角(hankaku)、それ以外を全角(zenkaku)と呼ぶ慣習」として説明しています。

NFKC 正規化で全角英数が半角になる理由

全角英数を半角に揃えるプログラムでは、NFKC という正規化を使う方法があります。 Unicode 標準付属書 #15 は NFKC を「互換分解のあと、正準合成」と定義しています。互換分解は、上の <wide> や <narrow> の対応をたどって本体の文字に戻す操作なので、「A」は「A」に、「カ」は「カ」になります。 続く正準合成で、「カ」と「゙」から戻った「カ」と結合濁点が 1 文字の「ガ」にまとまります。

同じ付属書は「半角と全角のカタカナは同じ文字列に正規化される」と例に挙げ、あわせて、 区別を消してしまうので NFKC を無条件に当てないよう注意しています。 NFKC は英数字を半角に、カタカナを全角に、一度に揃えます。 片方だけ直したいときは、対象を選べる道具のほうが手数が少なくて済みます。

出どころ: Unicode 17.0 の符号表「Halfwidth and Fullwidth Forms」(新しいタブで開きます)、 UAX #11 East Asian Width(新しいタブで開きます)、 UAX #15 Unicode Normalization Forms(新しいタブで開きます) の原文。分解の向きは UCD の UnicodeData.txt で確かめました。