25379


現在、Python 3のpandasを使って日本語を含む行列(表)を作り、C++に読み込んで分析することを考えております。  
Python
3ではデフォルトでutf-8が使われているようなのですが、今回はC++上で次の段階の処理を考えているため、どのようなエンコーディングでファイルを保存すべきか困っております。  
いくつかサイトを見る限り、ユニコードでもutf-16やutf-32に比べてutf-8のサポートが弱いなどの記述があり、どのようなエンコーディングでファイルを保存すべきか悩んでおります。どのようなエンコードがC++においては一般的に用いられているのでしょうか。

私の環境は、

  * Mac OS X (El Capitan) 
  * Python 3.4.3
  * clang c++11

となっております。


CC BY-SA 3.0
2016-06-02T05:12:45.577
25378
2016-06-02T22:16:35.917
12704
question
python c++ c++11
C++への入力ファイルの文字エンコーディング


ファイルのエンコーディングに何を使うかは、案件の要求定義で決めるものです。  
サポートが弱いとかそういう話で決めるものではないとオイラは思うわけです。

２０１６年現在のトレンドと言うか常識から言うと、  
要求定義：複数の国語が混在したデータを扱うことができて当たり前  
となりそうですよね。となれば  
\- 文字セットとしては UNICODE を採用  
\- テキストファイルのエンコーディングは UTF-8  
しかないでしょう。  
オイラはテキストファイルに UTF-16 / UTF-32 を使っているのを見たことが無いです。

一昔前なら 日本語だけ使えりゃいい→ Shift-JIS (というか CP932) だったかもしれません。

> どのようなエンコードがC++においては一般的に用いられているのでしょうか。

プログラム内部で、メモリ上で保持している文字コード（内部コード） と  
プログラム外部、つまりはファイルやネットワーク電文に使う文字コード（外部コード） は  
区別して考える必要があります。  
Windows 系のプログラムは内部コードに UTF-16 を使っていることが多いようです。  
Unix 系のプログラムは内部コードに UTF-32 を使っていることが多いようです。  
入出力の際に UTF-8 から/へ 変換すればよいだけのことです。


CC BY-SA 3.0
2016-06-02T06:09:13.100
25379
2016-06-02T06:09:13.100
8589
25378
answer


> Python 3ではデフォルトでutf-8が使われているようなのですが

これは本当でしょうか？
一般的に、内部では独自のエンコーディングを使用していて、ファイルなど外部入出力の際に扱いやすいエンコーディングに変換します。ファイルであればUTF-8がよくつかわれます。  
よく似た話でネットワークではネットワークバイトオーダーが使われますが、プログラム内部ではネイティブなエンディアンで値を処理します。

C++においても同様で、ファイル入出力はUTF-8で行えばそれで済む話です。`<locale>`ヘッダーには[`std::codecvt`](http://en.cppreference.com/w/cpp/locale/codecvt)や[`std::wstring_convert`](http://en.cppreference.com/w/cpp/locale/wstring_convert)などが用意されていますので、それらを使用して変換を行うことができます。


CC BY-SA 3.0
2016-06-02T22:16:35.917
25397
2016-06-02T22:16:35.917
4236
25378
answer