propertiesファイルを開いたら、日本語が文字化けしていた。
IntelliJ IDEAで開くと
のように、propertiesファイルが文字化けていた。
手順
メニューバーでInteliJ IDEAタブから、Preferencesをクリック
### File encodingsで Transparent native-to-ascii conversionのチェックボックスをクリック OKを押すと、エディタ上でも文字化けが解消されている解説
propertiesファイルがなぜ文字化けするのか
文字コードがASCIIコードに変換されて保存されているため。
ASCIIコードは日本語は含まれないので、UTF-8等で入力したものを
native2asciiというツールを使ってASCIIコードに変換して保存されている。
文字コードが違うのではなく、変換された文字列なので、どの文字コードに設定しようが日本語で正しく表示することは出来ない。
表示するためにはnative2asciiで再変換する必要がある。(下の図を参照)
ASCIIとは
文字コードの一つ。
アルファベット、数字、記号、空白文字、制御文字が登録されている。
日本語は含まれていない。英語圏で生まれたことが一番の理由。
ASCIIは日本語含まれていないから文字化けしているの?
勘違いされがちだが、違う。
propertiesファイルに日本語を登録する際(UTF-8などで入力した場合)、
native2asciiというJavaのツールでASCIIに変換して保存している。
native2asciiなんてコマンド普段叩いていないけど?
大抵はIDE(統合開発環境)が自動でやってくれている。
日本語で入力すると、ASCIIに変換されて保存されている。
設定を変えるとなぜ正しく表示できるようになるのか
native2asciiによる透過的な変換がされるようになるため
「Transparent native-to-ascii conversion」を有効にすると、Intelijがpropertiesファイルの操作時にnative2asciiを走らせ、UTF-8⇆ASCIIの変換を自動で行ってくれる。
propertiesファイルを入力、保存する場合
エディタ上では、デフォルトではUTF-8で表示、入力ができるようになっている。
このファイルを保存する場合、Intelijが自動的にnative2asciiを走らせ、ASCIIコードに変換して保存してくれる。
propertiesファイルを表示する場合
propertiesファイルをそのまま読み込むとASCIIコードのままのため文字化けしてしまうが、
Intelijが自動的にnative2asciiを走らせることでUTF-8に変換され表示される。
そもそもUTF-8でpropertiesファイルを管理したい
ASCIIコードで保存しなくてはならないのは、propertiesファイルを読み込むJava側の処理がASCIIコードであることを前提にしているからである。
読み込む側の処理を変更し、UTF-8で書かれたpropertiesファイルを読み込むようにすることもできる。
参考:Java のプロパティファイルは UTF-8 エンコーディングで記述したい