JavaScriptでUnicodeの正規化

Stringのnormalize()メソッドを使うと、Unicodeの正規化ができる。

normalize()メソッドの引数に’NFC’/’NFD’/’NFKC”NFKD’を指定することで、正規化形式を指定できる。

str.normalize('NFC')

簡単なサンプルを作ってみた。
ボタンを押すと、各形式で正規化する。

変換する文字列

変換した文字列


最初の「が」は1文字、2番目の「が」は「か」+「゛」になっている。
バックスペースキーを押して削除すると違いがわかる。

NFCにすると、どちらの「が」も1文字になる。
NFDにすると、どちらの「が」も「か」+「゛」の2文字になる。

ソースコード

<p>変換する文字列</p>
<textarea id="from_text" cols="50" rows="10"></textarea>
<p>
    <button type="button" id="NFC">NFC</button>
    <button type="button" id="NFD">NFD</button>
    <button type="button" id="NFKC">NFKC</button>
    <button type="button" id="NFKD">NFKD</button>
</p>
<p>変換した文字列</p>
<textarea id="to_text" cols="50" rows="10"></textarea>
<script>
    const normalize = (form) => {
        document.getElementById('to_text').value = document.getElementById('from_text').value.normalize(form);
    };
    ['NFC', 'NFD', 'NFKC', 'NFKD'].forEach(function (v) {
        document.getElementById(v).addEventListener('click', function (e) {
            normalize(v);
        });
    });
    document.getElementById('from_text').value = 'がか\u309912345';
</script>

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください