C# 英文系统上中文 string 显示乱码

本文介绍在C#环境下,使用log4net时遇到的中文字符串在英文系统上显示为乱码的问题,并提供了解决方案,包括如何配置log4net以支持中文编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:https://www.cnblogs.com/dhqy/p/13043089.html

 

C# 英文系统上中文 string 显示乱码

1. 问题现象:用 log4net 记录异常信息 Exception e 的 e.Message(string 类型) 在英文系统不能正常显示,显示为 ?????(中文系统能正常显示)。

    简单起见,测试时直接用 log4net 输出中文 string(testStr = “中文乱码测试abc123”),测试 log 显示如下:

     

 

2. 问题分析:英文系统和中文系统的默认编码不一样,log4net 没有显式设置输出文件编码时使用了系统的默认编码,而英文系统的默认编码不支持中文显示。

 

3. 解决方案:

   步骤一:log4net 配置中指定输出文件编码 appender.Encoding = Encoding.GetEncoding("gb2312") ,如下图所示:   

 

   步骤二:重新编译运行程序生成日志后,用 Notepad++ 打开日志文件,输出显示如下图所示( 依旧是乱码,不要慌,看下一个步骤):

   

 

    步骤三:将 Notepad++ 的编码指定为 gb2312,如下图所示:

   

   Notepad++ 指定编码 gb2312 后,即可正常显示中文,如下图所示:

   

 

 

注 1:控制台显示中文乱码,原因相同。解决方案如下:

  打印输出前,显式指定控制台编码: Console.OutputEncoding = Encoding.GetEncoding("gb2312");

 

注 2:C# string 类的默认编码为 UTF-16(Unicode),官方文档参考:

    https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/character-encoding-introduction#utf-16-code-units

 

注 3:数据要能正确显示主要涉及两个步骤:数据的编码与解码。

        log4net 中的编码:配置中显式指定输出文件编码 appender.Encoding = Encoding.GetEncoding("gb2312");

        控制台中的编码:因为 C# string 类默认编码为 UTF-16 是支持中文的,所以省略掉了。

        log4net 中的解码:Notepad++ 设置编码为 gb2312。

        控制台中的解码:Console.OutputEncoding = Encoding.GetEncoding("gb2312");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值