C#中StreamReader读取中文时出现乱码问题总结

之前有一篇文章“ C#读取及写入配置文件教程”(http://blog.csdn.net/lisenyang/article/details/47291083)当中有一个问题就是在读取配置文件时候中文出现乱码情况。这是为什么呢?原因是自Windows
2000之后的操作系统在文件处理时默认编码採用Unicode。所以.NET文件的默认编码也是Unicode。除非另外指定,StreamReader的默认编码为Unicode,而不是当前系统的ANSI代码页。可是文档大部分还是以ANSI编码存储,中文文本使用的是GB2312,所以才造成中文乱码。

首先。先和大家一起了解一个东西---“系统的当前 ANSI 代码页编码”,假设你要处理ANSI且codepage为GB2312的文件。或者其它已知编码类型的I/O接口。那么最好直接写Encoding.GetEncoding("GB2312"),由于Encoding.Default可能会变,而假设是一个全新的系统,则最好使用“Encoding.UTF8”,由于UTF8能够兼容世界上绝大多数语种。且效率较好,.NET默认也是用UTF8编码类型!

我们看下查看和改动当前系统的ANSI代码页编码:

Linux系统查看locale的方法:在终端输入locale
windows查看代码页方法:在cmd.exe输入chcp,或者右键cmd.exe属性查看。

改动locale:
Linux系统改动配置文件/etc/sysconfig/i18n或/etc/sysconfig/language
Windows在開始-控制面板-区域和语言选项-选择一个语言

改动session local的方法:
windows在CMD命令行输入 mode con cp select=437
linux在终端export LANG=zh_CN.UTF8

如图:

之前我的代码例如以下:

改动后代码例如以下:

时间: 2024-12-28 01:51:40

C#中StreamReader读取中文时出现乱码问题总结的相关文章

StreamReader读取文件时出现乱码的解决方案

今天在做一个打开文件对话框OpenFileDialog时,需要对打开的文件进行读取,显示在在窗体中的RichTextBox中.但是在显示文件时,却发现显示的中文字符串出现乱码.代码的关键部分如下所示: 1 StreamReader sr = new StreamReader(openFileDialog.OpenFile()); 2 string str = sr.ReadToEnd(); 3 childForm.richTextBox1.Text = str; 开始我也想到了是字符编码出了问题

利用jQuery 解决URL请求参数有中文时出现乱码的问题

利用jQuery 解决URL请求参数有中文时出现乱码的问题 在开发的时候经常会碰到URL中请求参数含有中文的情况,这时如果在前台不作处理,直接在后台利用request.getParameter()拿对应的参数值就会出现中文乱码. 这时可以先利用jQuery对对应中文进行encodeURI(),例子如下: 前台对应代码 <!--省畋无关代码--> <input type="button" id="submitA" value="重发短信&q

Linux系统中 Sublime Text 中文 GBK 文件乱码问题

Sublime Text 是一个很不错编辑器,具有漂亮的界面和强大的功能.再加上丰富的插件,而且还跨平台,绝对是一款实打实的神器啊! 众所周知,Sublime Text 对中文支持的极差,可以说几乎就没有特别的支持.尤其是 GBK 编码的中文文件,直接打开就是一团乱码.ST 的开发者 Jon Skinner 貌似对中国市场不怎么感冒,一直未加中文 GBK 的支持.既然开发者不给支持中文,那么就只能靠中国用户自己解决问题了.在这里感谢热心网友 seanliang 开发了强大的 ConvertToU

表单提交中文时出现乱码

下面是一个提交页面(submit.jsp),代码如下: <html> <head> <title>JSP的中文处理</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <form name="form1" method=&quo

Torch-RNN运行过程中的坑 [2](Lua的string sub函数,读取中文失败,乱码?)

0.踩坑背景 仍然是torch-rnn/LanguageModel.lua文件中的一些问题,仍然是这个狗血的LM:encode_string函数: function LM:encode_string(s) local encoded = torch.LongTensor(#s) for i = 1, #s do local token = s:sub(i, i) local idx = self.token_to_idx[token] assert(idx ~= nil, 'Got invali

C# .net中cookie值为中文时的乱码解决方法

在学习当中碰到cookie中文乱码问题,问题原因:cookie对中文不太支持,将中文放入cookie中会报错误. 解决办法: 1.编码 将中文进行编码再放入cookie中: String username1 = URLEncoder.encode(username, "utf-8"); String userpwd1 = URLEncoder.encode(userpwd, "utf-8"); 其中username和userpwd其中有中文,username1和us

解决Servlet中GET请求参数为中文时出现乱码

服务器:Tomcat 7.0.xx在Servlet的doGet方法中添加以下代码: String str = request.getParameter("username");byte[] bytes = str.getBytes("iso-8859-1");str = new String(bytes, "utf-8"); 例子: protected void doGet(HttpServletRequest request, HttpServ

Hadoop0.20.2中MapReduce读取gb2312文件出现乱码问题

单位用的是Linux系统的字符编码是gb2312,所以生成的文件都是按照默认编码生成的.给我的文件也都是gb2312的,在hadoop中运行mapreduce出现乱码,在网上查资料说是因为hadoop的文件系统默认用的是utf-8,那么只有两条路可以选,要么改文件的编码格式,要么改在Mapreduce程序中想办法转一下.很显然改文件的编码格式是不现实的,因为客户那边用C++生成的文件千千万万,而且原来的老程序还在不断的生成,要他们改程序涉及到的工作量太大了.所以这能我这边想办法了. 因为Mapr

有效解决ajax传中文时,乱码的情况,php处理接收到的值

在抽奖环节时,需把获奖名单通过ajax的post方式传输给php后台进行储存,但是php接收到的值确是乱码.在百度之后并没有找到合适的解决方法. 则使用js的encodeURI函数可以有效解决,但不知为何需使用两次. 此时传输的值获取到的为: 则PHP使用urldecode函数处理获取到的值. 则有效解决ajax传输中文乱码的情况. 声明:本人菜鸟一枚,有不对之处还望指出. 原文地址:https://www.cnblogs.com/xin-1-php/p/10019558.html