本日は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; } }