![pexels-photo-4498792.jpeg](/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2Fai4vjpehjr3j%2F5vUR2CuMhBauhtcj6zVNfg%2F179619b99d4bdaaee6853c3ebf205f30%2Fpexels-photo-4498792.jpeg&w=1920&q=75)
Scalaでcsvをexcelで開くときにUTF-8で解釈させ文字化けを防ぐ方法
![Kazuki Moriyama](/_next/image?url=https%3A%2F%2Fimages.ctfassets.net%2Fai4vjpehjr3j%2F2Oa6QzkYOe51LQiER7VEtN%2F6e819c38a98a1c649401b86861c40d53%2Fimage.png&w=96&q=75)
Kazuki Moriyama (森山 和樹)
エクセルで普通にutf-8のcsvを開くときの問題
- utf-8形式をshift_jisで読み込もうとするので日本語系がバグる
解決方法
- BOMを指定してutf-8であることを指定する
BOMとは
- Byte Order Maskの略
- テキストデータの先頭数バイトのデータのこと
- これによってプログラムはテキストがなんの文字コードであるかを判別している
- utf-8の場合は先頭3byteが
0xEF 0xBB 0xBF
になっている
Scalaでやる
import java.nio.charset.StandardCharsets.UTF\_8
val texts: List\[Byte\] = ... // なんかのテキストデータのbyte列
val utf\_8texts = "\\uFEFF".getBytes(UTF\_8) ++ texts // BOMが指定されたtext byte列