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>