NBSP についてのメモ

ISO-8859 系 (←未確認) の文字コードには、通常のスペース (SPACE ; 0x20) の他に、非改行スペース (NO-BREAK SPACE ; 0xA0) という文字が定義されている。後者 (以下 NBSP) は、ワードラップが行われない、という点が通常の SPACE と異なる。つまり、

Hello World!

という例で、Hello と World の間にあるのが SPACE の場合、表示幅が狭い場合には

Hello
World!

と折り返されるが、NBSP の場合はあくまで

Hello World!

と表示される。その結果、はみだして読めなくなったり、横スクロールバーが表示されたり、World! の途中で折り返されたりする (どう処理されるかはソフトウェアによる)。
また、HTML では複数の SPACE が連続しているとひとつにまとめて表示されるが、NBSP ではその処理が行われないので、スペースの個数を維持したい場合に、SPACE の代用として NBSP が使われることがある (多くの場合は、文字実体参照   が使用される)。
Unicode では、SPACE が U+0020、NO-BREAK SPACE が U+00A0 と定義されている。したがって、ISO-8859 系文字コードから変換する場合には、「そのまま」でいいことになる。
以上のように一見単純な NBSP だが、日本語環境では、話が無駄にややこしくなる。Shift JIS や EUC-JP では、0xA0 には文字が定義されていないのだが、ISO-8859 系ベースのソフトウェアを日本語化した場合等に、0xA0 が使用されてしまう例もあるらしい。例えば、WYSIWYG の HTML エディタでスペースを打ったときに、レイアウトを重視するために   を挿入するものがあるが、ソフトウェアによっては、代わりに 0xA0 を挿入してしまうかもしれない。しかし、特に日本製のソフトウェアでは NBSP に対する考慮なんてまずないわけで、トラブルの原因にもなりうる
また、Windows の CP932 では、0xA0 が「半角カナスペース」として扱われていて、Win32 APIUnicode に変換すると、私用領域の U+F8F0 にマッピングされる。私用領域なので、他とバッティングする可能性はあり、例えば NTT DoCoMo の i モードでは、U+F8F0 を「ダイヤ」の絵文字に割り当てている。