MRが楽しい

MRやVRについて学習したことを書き残す

Unityで文字コードを指定してテキストファイルを入出力する

本日はUnityの小ネタ枠です。
Unityで文字コードを指定してテキストファイルを入出力する方法についてです。

WriteAllText/ReadAllText

WriteAllTextは新しいファイルを作成し、文字列を書き込みます。
書き込み時に文字列のエンコーディングを引数で指定することができます。
learn.microsoft.com

System.IO.File.WriteAllText(filePath, text, encoding);

ReadAllTextは指定のファイルを開き、内容を文字列として読み込みます。
読み込み時に文字列のエンコーディングを引数で指定することができます。
learn.microsoft.com

string text = System.IO.File.ReadAllText(filePath, encoding);

サンプルスクリプト

以下の通り、エンコーディングを指定せずWriteAllText/ReadAllTextで入出力を行う関数と、エンコーディングを指定してWriteAllText/ReadAllTextで入出力を行う関数を持つサンプルスクリプトを用意しました。
それぞれの処理結果と出力されたテキストファイルを確認します。実行環境はWindowsPC上のUnityEditorです。
・TextEncodeFileTest.cs

using TMPro;
using UnityEngine;

public class TextEncodeFileTest : MonoBehaviour
{
    [SerializeField]
    private TMP_Text _TMPtext;
    
    [ContextMenu("EncodingDefaultTest")]
    public void EncodingDefaultTest()
    {
        // デフォルトの文字コードのテキストファイルを出力する
        WriteDefaultTextFile();

        // デフォルトの文字コードのテキストファイルを読み込む
        ReadDefaultTextFile();
    }
    
    private void WriteDefaultTextFile()
    {
        // テキストファイルに入力する文字列
        string text = "Defaultはろーわーるど";
        
        // 文字列をデフォルトの文字コードのテキストファイルとして出力する
        string filePath = Application.streamingAssetsPath + "/test_default.txt";
        System.IO.File.WriteAllText(filePath, text);
    }
    
    private void ReadDefaultTextFile()
    {
        // デフォルトの文字コードを指定してテキストファイルから文字列を読み込む
        string filePath = Application.streamingAssetsPath + "/test_default.txt";
        string utf8Text = System.IO.File.ReadAllText(filePath);

        _TMPtext.text = utf8Text;
    }

    [ContextMenu("EncodingShiftJISTest")]
    public void EncodingShiftJISTest()
    {
        // Shift-JISの文字コードのテキストファイルを出力する
        WriteShiftJISTextFile();

        // Shift-JISの文字コードのテキストファイルを読み込む
        ReadShiftJISTextFile();
    }
    
    private void WriteShiftJISTextFile()
    {
        // テキストファイルに入力する文字列
        string text = "ShiftJISはろーわーるど";
        
        // 文字列をShift-JISの文字コードのテキストファイルとして出力する
        string filePath = Application.streamingAssetsPath + "/test_shiftJIS.txt";
        System.IO.File.WriteAllText(filePath, text, System.Text.Encoding.GetEncoding("Shift-JIS"));
    }
    
    private void ReadShiftJISTextFile()
    {
        // Shift-JISの文字コードを指定してテキストファイルから文字列を読み込む
        string filePath = Application.streamingAssetsPath + "/test_shiftJIS.txt";
        string text = System.IO.File.ReadAllText(filePath, System.Text.Encoding.GetEncoding("Shift-JIS"));

        _TMPtext.text = text;
    }
}

エンコーディングを指定しない場合

テキストファイルを確認すると、UTF-8エンコーディングで文字列が入出力されました。

エンコーディングを指定した場合(Shift-JIS)

テキストファイルを確認すると、以下の通りANSI(Shift-JIS)のエンコーディングで文字列を入出力できました。

Windows上でANSIと呼ばれる文字コードは日本環境ではShift-JISに当たる文字コードです。
www.office-qa.com