You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity调用Python脚本GUI Label显示特殊字符乱码问题求助

解决Unity调用Python脚本时特殊字符乱码问题

嘿,我帮你排查下这个乱码问题!你遇到的核心问题是Python输出的编码和Unity读取时使用的编码不匹配,而且你当前代码里的编码操作完全搞反了——把已经读取到的字符串再转成UTF-8字节,这根本解决不了问题,反而可能加重乱码。

第一步:确保Python脚本输出UTF-8编码

首先要让Python的标准输出强制使用UTF-8,避免系统默认编码干扰。在你的Python脚本开头加上这段代码:

import sys
# 重新配置标准输出为UTF-8编码
sys.stdout.reconfigure(encoding='utf-8')

之后再打印你的内容,比如:

print("('fromaje', 'Fausse:') ('Correction suggérér:','fromage')")

第二步:Unity端用UTF-8编码读取输出

你原来的StreamReader默认会使用系统的默认编码(比如Windows上是GBK),这就是导致特殊字符乱码的关键。修改Unity代码,创建StreamReader时明确指定UTF-8编码:

using (Process proc = Process.Start(start))
{
    // 重点:基于标准输出流,用UTF-8编码创建StreamReader
    using (StreamReader reader = new StreamReader(proc.StandardOutput.BaseStream, Encoding.UTF8))
    {
        string result = reader.ReadToEnd();
        UnityEngine.Debug.Log(result);
        Message1.text = result;
    }
}

注意:删掉你原来代码里的UTF8Encoding utf8 = new UTF8Encoding();和byte[] encodedBytes = utf8.GetBytes(result);这两行,它们完全没必要,反而会帮倒忙。

额外排查点

如果还是有乱码,检查Python输出是否带UTF-8 BOM(字节顺序标记)。可以在Unity里用new UTF8Encoding(false)来创建编码(false表示忽略BOM),修改后的StreamReader初始化代码:

using (StreamReader reader = new StreamReader(proc.StandardOutput.BaseStream, new UTF8Encoding(false)))

按照这两步操作,你的特殊字符应该就能正确显示在Label组件里了!

内容的提问来源于stack exchange,提问作者Ran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:22:29