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

如何在C#控制台中实现日文字符(假名)的输入与输出

C#控制台日文假名输入输出解决方案

问题根源

仅设置Console.InputEncoding无法生效的核心原因是Windows控制台默认继承系统活动代码页,.NET的编码设置没有同步修改控制台底层的输入代码页配置,导致输入的日文编码解析错误。

具体修复步骤

  • 强制修改控制台底层代码页为UTF-8(代码页编号65001),通过调用Windows系统API实现,优先级高于.NET自带的编码设置
  • 确认控制台使用支持日文的TrueType字体,可选MS Gothic、思源黑体、微软雅黑等,不要使用默认点阵字体
  • 删除冗余的字符串转码逻辑,C#的string类型本身就和C++的wchar_t功能完全等效,底层采用UTF-16编码,可直接存储日文假名,额外的byte数组转码反而会破坏原始编码

完整可运行代码

using System;
using System.Runtime.InteropServices;
using System.Text;

class Program
{
    // 引入Windows API设置控制台代码页
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool SetConsoleCP(uint wCodePageID);
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool SetConsoleOutputCP(uint wCodePageID);

    static void Main(string[] args)
    {
        const uint UTF8_CODE_PAGE = 65001;
        // 先调用系统API修改控制台输入输出代码页
        SetConsoleCP(UTF8_CODE_PAGE);
        SetConsoleOutputCP(UTF8_CODE_PAGE);

        // 再同步.NET层面的编码设置
        Console.OutputEncoding = Encoding.UTF8;
        Console.InputEncoding = Encoding.UTF8;

        Console.WriteLine("请输入一个假名测试:");
        string input = Console.ReadLine();

        // 测试输出
        Console.WriteLine("你输入的内容是:" + input);
    }
}

替代方案(无需修改代码)

如果不想调整代码,可在系统层面开启全局UTF-8支持:
打开「控制面板→区域→管理→更改系统区域设置」,勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,重启设备后你原来的代码即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:39:03