【Unity】Unityと文字コードと改行コード

Unityと文字コードと改行コードのお話です。

文字コード

文字コードとは要するに、ある文字をコンピュータが扱うときにどんな数字で表現するか、というルールのことです。

仮にある文字コードでは「01」は「あ」を表すというルールだとします。
しかしまた別のある文字コードでは「01」は「A」を表したりします。

対応していない文字コードで書かれた文字は解読できないため、文字コードを適切に設定することは重要です。

代表的な文字コード

文字コードのうち代表的なものには以下があります。

ASCIIには基本的な英数字や記号が含まれます。
それに追加して日本語とかを使えるようにしたのがShift-JISやUTF-8です。

Unityの文字コードはBOM付きUTF-8

さてUnityでは文字コードはBOM付きのUTF-8にする必要があります。

文字コードの必要性を知るために、まず下記のようなテキストファイルを作ります。 文字コードはBOM付きのUTF-8にしておきます。

01234abcdeあいうえお

そしてこれをUnityでログ出力します。

using UnityEngine;

public class Example : MonoBehaviour
{
    [SerializeField]
    private TextAsset _ta;

    void Start()
    {
        Debug.Log(_ta.text);
    }
}

これは正常に出力されます。
次にこのテキストファイルの文字コードををShift-JISに変換してみます。

すると文字列を変えていないにもかかわらず、今度は何も出力されなくなりました。

f:id:halya_11:20190227101922p:plain

ちなみにBOMとは文字コードUTF-8ですよ、と教えるためのデータです。
ファイルの最初に付与され、なくても問題ないこともあるものの、あったほうがより良いようです。

改行コード?

改行コードとは、「改行」を表すデータのことです。
以下の三種類があります。

  • CR : ¥r
  • LF : ¥n
  • CR + LF : ¥r¥n

これも文字コードと同じくそのファイルがどの改行コードを採用しているかがわからないと正しく改行を読めません。

ちなみに改行コードはOSごとに採用しているものが異なります。
macは主にLF、WindowsはCR + LFになります。

Unityの改行コードはCR + LFに

改行コードはUnityではCR + LFに統一しておくのがベターなようです。

LFで統一でもいいのかもしれませんが、CR + LFのファイルとLFのファイルが混在していると、
バージョン管理の時に改行コードが変わっただけで差分が出るなどの不都合が生じます。

また、文字コードが統一されていない環境で複数人が開発を進めると一つのファイルに改行コードが混在することがあります。
これはStackTraceの行番号の不正やコンパイルエラーを招くので、重要な問題になります。

Unityも一つのファイルに改行コードが混在していると次のような警告を出します。

There are inconsistent line endings in the 'Assets/Example.cs' script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.

このようなことからも、改行コードは統一しておくべきです。

Unityで文字コードを自動的に統一する

Unityで文字コードを自動的に統一するにはAssetPostProcessorを使うとよいようです。

https://debuglog.tumblr.com/post/26550984743/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AEutf-8%E5%A4%89%E6%8F%9B
debuglog.tumblr.com

参考

https://search.yahoo.co.jp/amp/s/www.graffe.jp/blog/1278/amp/%3Fusqp%3Dmq331AQECAEoAQ%253D%253D

https://wa3.i-3-i.info/word11422.html

https://search.yahoo.co.jp/amp/s/blog.nishimu.land/entry/2014/05/23/030904%3Famp%3D1%26usqp%3Dmq331AQECAEoAQ%253D%253D

uxmilk.jp

silence2you.blogspot.com

https://debuglog.tumblr.com/post/26550984743/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AEutf-8%E5%A4%89%E6%8F%9B
debuglog.tumblr.com