a minute ago

MacOSで濁点、半濁点が1文字として認識される問題を解決


事象

1. デバイス
2. デバイス

ブラウザでご覧の皆様には、1と2は同じに見えると思います。

しかし、この記事をintelliJのエディタで書いている私にはこう見えています。

濁点が1文字として認識されているのが分かるかと思います。

MicrosoftのGraph APIのレスポンスや、windowsユーザーから受け取ったファイルなどで現れます。

この1と2はデータが異なるため、プログラマーにとっては厄介極まりないです。

対策

NFCで標準化しましょう。JavaScriptではこうします。

const textData = "デバイス".normalize('NFC')

ではとてつもなくネストされ、かつ大量のプロパティを持つオブジェクトがきた場合はどうするのか。

このように、一度文字列にしてから標準化し、JSON.parseで元に戻すのが良いと思います。

const nested = {textData: {level1: {level2: {value: 'デバイス'}}}} // 本当は濁点が1文字になっています。
const normalized = JSON.parse(JSON.stringify(nested).normalize('NFC'))

console.log(normalized.textData.level1.level2.value)
// デバイス (普通に表示されます)

Related Articles