[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=ja_JP.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=ja_JP.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=ja_JP.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=ja_JP.UTF-8;LC_IDENTIFICATION=C"
付録 A — エンコーディングの問題
エンコーディングの問題とは、いわゆる「文字化け」のことです。
A.1 文字化けが起こる理由
簡単に言うと、エンコーディングとは人間が理解可能な自然言語から機械が理解可能な記号への「翻訳方法」です。エンコードとデコードで異なる方式を用いると、適切な文字に翻訳できず、文字化けが起こります。
エンコーディングの方法は以下のように、使用しているOSによって変わります。
- Mac, Linux: UTF-8
- Windows: Shift-JISやCP932
つまり、Macなどで作成され、すなわちUTF-8でエンコードしたデータをWindowsでShift-JISなどでデコードしようとすると文字化けが起こります(その逆もしかり)。
Windows 10以上でR 4.2以上を使っている場合はUTF-8がデフォルトのエンコーディングになります。この場合は、以下の説明のRに関する箇所においてはMax, Linuxとして読んでください。
したがって、対処法は次の通りになります。
- Mac, Linuxで文字化けが起こる\(\leadsto\)データはShift-JISなどでエンコードされているので、そのように指定する。
- Windowsで文字化けが起こる\(\leadsto\)データはUTF-8などでエンコードされているので、そのように指定する。
なお、UTF-8が様々な言語に対応しているものなので、データなどを保存する際はこちらを使うほうがベターです。
A.2 ロケールの確認
ロケールとは、ざっくり言うと、PCにおける言語や国・地域の設定のことです。ロケールを確認すると、デフォルトのエンコーディングも分かります。
僕はLinuxを使っているので、UTF-8がデフォルトのエンコーディングです。
A.3 データの文字化け
UTF-8でエンコーディングされたデータとShift-JISでエンコーディングされたデータをダウンロードします。
A.3.1 問題の確認
まず、UTF-8のデータを読み込みます。MacやLinuxの場合は問題なく読み込めるはずです。一方で、Windowsの場合はエラーが表示されるはずです。
# A tibble: 3 × 1
桃太郎
<chr>
1 イヌ
2 サル
3 キジ
逆に、Max, LinuxではShift-JISのデータは読み込めず、Windowsでは読み込めるはずです。
Error in make.names(col.names, unique = TRUE): invalid multibyte string at '<93><8d><91><be><98>Y'
Error in nchar(x, "width"): invalid multibyte string, element 1
A.3.2 対処法
データを読み込む時にエンコーディング方法を明示することで解決できます。
# A tibble: 3 × 1
桃太郎
<chr>
1 イヌ
2 サル
3 キジ
“Shift-JIS”を”UTF-8”に変更すれば、UTF-8のデータを読み込むことができます。
# A tibble: 3 × 1
桃太郎
<chr>
1 イヌ
2 サル
3 キジ
例えば、UTF-8の.csv
ファイルをWindowsのエクセルで開くと文字化けが起こります。Libre Officeという無料のオフィスソフトではエンコーディングを指定してファイルを開くことができるので、こちらで開くことを勧めます。
A.4 スクリプトの文字化け
UTF-8でエンコーディングされたスクリプトとShift-JISでエンコーディングされたスクリプトをダウンロードします。
A.4.1 問題の確認
Mac. LinuxでUTF-8のスクリプトを開くと正しく表示されますが、Windowsでは表示されないはずです。
同様に、Shift-JISの方はWindowsで正しく表示され、Mac, Linuxでは文字化けが起こるはずです。
- Rスクリプトですが、原理はPythonスクリプトと同様です。VIsual Studio Codeなどで開いてみてください。
A.4.2 対処法
RStudioの場合、メニューの中のFile
にReopen with Encoding...
というのがあるので、UTF-8
を選択します。さらにSet as default encoding for source files
にチェックを入れることで今後はUTF-8
で表示されます。
今後、文字化けが起こる場合はShift-JISでエンコーディングしたファイルのはずなので、Reopen with Encoding...
でShift-JIS
を選択してファイルを開きます。
Visual Studio Codeの場合、右下にエンコーディングが書かれているので、それをクリックし、Reopen with Encoding
をクリックし、適当なエンコーディングを選択します。
A.5 エンコーディングの確認
ファイルのエンコーディングを確認することが可能です。どれくらい信頼していいのかは分かりません。
# A tibble: 1 × 2
encoding confidence
<chr> <dbl>
1 windows-1252 0.23
A.6 文字化けしない保存
A.6.1 データの保存
データを保存する際は(そもそもマルチバイト文字を避けるべきですが)UTF-8で保存するほうが良いでしょう。
tidyverse
ではwrite_excel_csv()
を使うことで、エクセルでも文字化けしないようにできます。
pandas
ではencoding='UTF-8_sig'
とすることで、エクセルでも文字化けしないようにできます。
A.6.2 スクリプトの保存
RStudioの場合、File
の中のSave with Encoding...
でUTF-8
を選択してください。ここでもUTF-8がデフォルトになるようにチェックを入れておきましょう。
A.6.3 画像の保存
Macで画像を保存する際に、日本語が文字化けするらしいです。対処法は以下の通りです。
- フォント名
HiraKakuProN-W3
は例です。