如何在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
相关产品推荐
相关产品推荐

