質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

4658閲覧

pythonの日本語出力をunity上で行いたいが、文字化けしてしまう件

kohehe

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/14 02:32

編集2020/06/14 06:42

pythonから出力される日本語(全角文字)をunityのコンソールに出力した際、pythonから返される日本語だけが文字化けしてしまいます。

pythonと、当該pythonファイルを呼び出すc#は共にutf-8なのですが、c#は正しくはUnicode(UTF-8 シグネチャ付き)-コードページ65001です。「シグネチャなし」もありましたが、結果は変わりませんでした。

英語(半角文字)はちゃんと出力されます。

やりたいことは、pythonの日本語出力をunity上のコンソールで正しく表示することです。知恵をお貸しください。お願いします。

すみません。追記のソースコードです。

python import sys playerSelect=str(sys.argv[1]) print( "REPLY[" + playerSelect + "]:" + "日本語" )
C# using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using System.Diagnostics; public class PythonGo : MonoBehaviour { //pythonの場所 private string pyExePath = @"C:\Users\81909\AppData\Local\Programs\Python\Python37\python.exe"; //実行したいスクリプトがある場所 private string pyCodePath = @"C:\Users\81909\Desktop\MeCab\MeCabPython\otameshi.py"; // Start is called before the first frame update private void Start() { //外部プロセス設定 ProcessStartInfo processStartInfo = new ProcessStartInfo() { //実行するpythonファイル FileName = pyExePath, //WorkingDirectory = @cd, //シェルを使うかどうか UseShellExecute = false, //ウィンドゥを開くかどうか CreateNoWindow = true, //テキスト出力をStandardOutputストリームに書き込むかどうか RedirectStandardOutput = true, //実行スクリプト 引数(複数可能) Arguments = pyCodePath + " " + "\"日本語\"" }; //外部プロセス開始 Process process = Process.Start(processStartInfo); //ストリームからの出力を得る StreamReader streamReader = process.StandardOutput; string str = streamReader.ReadLine(); //外部プロセス終了 process.WaitForExit(); process.Close(); //実行 print(str); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2020/06/14 03:24

具体的にどうなっているかが分からないので、必要な情報を質問に追記してください (ソースコード・出力結果・望む出力内容・エラーがあればその内容 など)
guest

回答3

0

ベストアンサー

試したところ、以下を追加すれば文字化けが解消されました。

C#

1 //外部プロセス設定 2 ProcessStartInfo processStartInfo = new ProcessStartInfo() 3 { 4 5 //実行するpythonファイル 6 FileName = pyExePath, 7 8 //WorkingDirectory = @cd, 9 10 //シェルを使うかどうか 11 UseShellExecute = false, 12 13 //ウィンドゥを開くかどうか 14 CreateNoWindow = true, 15 16 //テキスト出力をStandardOutputストリームに書き込むかどうか 17 RedirectStandardOutput = true, 18 19 //実行スクリプト 引数(複数可能) 20 Arguments = pyCodePath + " " + "\"日本語\"", 21 22 StandardOutputEncoding = Encoding.GetEncoding("shift_jis") //←追加 23 24 };

おそらく、Unityのコンソールのエンコードはshift_jisなのでしょう。

投稿2020/06/15 00:20

fiveHundred

総合スコア10152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kohehe

2020/06/15 00:56

試したらちゃんと日本語で出力されました! ありがとうございます!
yumetodo

2020/06/15 09:45

しかしこれ、Unityのコンソールのエンコードを変えられないものかなぁ・・・
guest

0

Pythonでは、文字コードを# -*- coding: utf-8 -*-で指定してあげる必要があります。

投稿2020/06/14 06:48

fiveHundred

総合スコア10152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kohehe

2020/06/14 23:52

# -*- coding: utf-8 -*- import sys playerSelect=str(sys.argv[1]) print( "REPLY[" + playerSelect + "]:" + "日本語" ) これでunity上で実行したら、同様の文字化けが出力されました。 エンコードについて調べたら"-"が"_"の記事もあり、両方試しましたが同じく文字化けでした。
fiveHundred

2020/06/15 00:22

別回答として投稿したので、そちらを確認してみてください。
guest

0

当該pythonファイルを呼び出すc#は共にutf-8なのですが

これは2つのものが混じってますよね。pythonを呼び出すときに標準出力の文字エンコードをなにと捉えるかと、Unityのコンソールの設定と。多分python呼び出しがまずいんじゃないですかね?

https://stackoverflow.com/questions/7520706/force-standardoutputencoding-to-utf8

投稿2020/06/14 05:38

yumetodo

総合スコア5852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問