littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

Unity/C#で XMLファイルとしてデータを保存する(UTF-8/日本語対応)

こちらの記事で、Unityで簡単にXMLでのファイル読み書きができる方法を見たのですが UTF-8に対応していないため、日本語が保存できませんでした。

<?xml version="1.0" encoding="us-ascii"?>
・・・

こんな感じでus-asciiになってしまうので、UTF−8で日本語が利用できるように書き換えました。

  • XmlUtil.cs
using System.IO;
using System.Xml;
using System.Xml.Serialization;

public class XmlUtil {
    // シリアライズ
    public static T Seialize<T>(string filename, T data) {
        using ( var stream = new FileStream(filename, FileMode.Create) ) {

            var serializer = new XmlSerializer(typeof(T));
            var streamWriter = new StreamWriter(stream, System.Text.Encoding.UTF8);//追加
            serializer.Serialize(streamWriter, data);//変更
        }
        
        return data;
    }
    
    // デシリアライズ
    public static T Deserialize<T>(string filename) {
        using ( var stream = new FileStream(filename, FileMode.Open) ) {
            var serializer = new XmlSerializer(typeof(T));
            return (T)serializer.Deserialize(stream);
        }
    }
}

こうなります。

<?xml version="1.0" encoding="utf-8"?>
・・・

PlayerPrefsに履歴とか、セーブデータとか構造データを保存するとき便利です。

デバイスごとのXMLファイルの保存場所はここが参考になりました。

【Unity3D】ファイル保存パス - Qiita