http://corrinejtt.iteye.com/blog/895069

在处理文本时,经常需要处理Encoding的概念。存在这个问题的原因在于,在.NET程序内文本只是string和char对象,而保存到硬盘时,或者准备用socket把它发送出去时,都得先转换成byte[]或者字节流。而转换的算法,就是Encoding。Encoding不同文本文件的行数也不同。

老外的程序里面,都喜欢用Encoding.ASCII,这是因为他们主要只使用western字符;于是我们经常要在他们的代码把Encoding.ASCII替换成Encoding.Default才能使用。

所谓Encoding.Default,是指当前系统设置的“默认字符集编码方式”。你可以通过控制面板里面的区域选项设置它(这是在我的机器上的设定):

注意红色方框内的部分,“为你的非Unicode程序选择一个语言来匹配其本地语言版本”。这里选择了Chinese (PRC),则Encoding.Default等效于Encoding.GetEncoding("gb2312")。gb2312在代码页936,所以所有以双字节编码(ANSI编码)字符的程序在这个系统上会使用936代码页,使用Unicode的不受影响。

你可以看到 Encoding.Default的值是和系统设定相关的。这样,有些时候会出问题:一台机器用socket发送一段文本到另一台机器,两边都设定编码方式为Encoding.Default,但两台机器的区域选项的这个设置是不一样的,却没有被注意;如果发送的是非western字符,则接受方必然会得到乱码。这种问题往往会令人很困惑。

所以在面对中文且为ANSI编码的情况下,最好不要用Encoding.Default,而用 Encoding.GetEncoding("gb2312"),或者更直接的Encoding.GetEncoding(936);而如果有可能的话,最好全部使用unicode,比如utf-8,也就是Encoding.UTF8。有了unicode之后,其实我们不需要代码页的概念。

[转]谨慎使用Encoding.Default相关推荐

  1. 谨慎使用Encoding.Default

    在处理文本时,经常需要处理Encoding的概念.存在这个问题的原因在于,在.NET程序内文本只是string和char对象,而保存到硬盘时,或者准备用socket把它发送出去时,都得先转换成byte ...

  2. [专栏精选]Unity中编码Encoding脱坑指南

    本文节选自洪流学堂公众号技术专栏<大话Unity2018>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 洪流学堂,让你快人几步.你好,我是郑洪智. 大智:"昨 ...

  3. dotNET面试题汇总系列连载(1):基础语法

    点击上方"dotNET全栈开发","设为星标" 加"星标★",每天11.50,好文必达 全文约4000字,预计阅读时间8分钟 马上要到202 ...

  4. C#实现微信公众号群发消息(解决一天只能发一次的限制)

    经过几天研究网上的代码和谢灿大神的帮忙,今天终于用C#实现了微信公众号群发消息,现在整理一下. 总体思路:1.首先必须要在微信公众平台上申请一个公众号. 2.然后进行模拟登陆.(由于我对http传输原 ...

  5. C#基础面试题(附答案)

    目录 1.C#中堆和栈的区别? 2.C#中的委托是什么?事件是不是一种委托? 3.C#静态构造函数特点是什么? 4.CTS.CLS.CLR分别作何解释 5.C#中什么是值类型与引用类型? 6.请详述在 ...

  6. C# 模拟POST上传图片

    做到一个上传图片的需求,网页已经可以了,模拟网页在客户端上传图片,试了很多次都没成功, 最后发现是少了一个换行符,而且是网页上的字符全部一字不漏的转换成文件流,上传. 先看下网页下的完整请求: 前面这 ...

  7. 使用Python做QQ机器人

    目录 事前准备 下载框架 具体实现 事前准备 一台电脑(windows7以上) python 3.8.10以上 一个不用的QQ号(如果没有可参考使用一个手机号注册多个QQ) 下载框架 我使用的是 go ...

  8. C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享

    总体思路: 1.首先必须要在微信公众平台上申请一个公众号. 2.然后进行模拟登陆.(由于我对http传输原理和编程不是特别懂,在模拟登陆的地方,不是特别清楚,希望有大神指教) 3.模拟登陆后会获得一个 ...

  9. VB.net 微信公众平台开发(一) Token验证

    登录https://mp.weixin.qq.com/ 后,在公众平台后台管理页面 – 开发者中心页,点击"修改配置"按钮,填写URL.Token和EncodingAESKey,其 ...

最新文章

  1. golang 去除 空白字符 含制表符
  2. 学会python爬虫怎么赚钱-学会python爬虫怎么赚钱
  3. query如何全选或不全选时,不操作已经禁用的checkbox
  4. 举例说,在命令模式(Command Pattern)
  5. 我的小作品(烂笔头)
  6. Three.js之渲染器
  7. PhpExcel 删除默认的Sheet
  8. 数据库系统的体系结构知识笔记
  9. sklearn模型使用贝叶斯优化调参(以随机森林为例)
  10. java处理超大csv文件_比较 csv 文件中数据差异
  11. Struts2 + Spring + Hibernate 通用 Service 和 DAO
  12. 并行程序设计---cuda memory
  13. jquery uploadify 避免jquery.uploadify.min.js 文件多次引用导致只有最后一个才能上传
  14. phpMyadmin学习入门
  15. python毕业设计作品基于django框架 二手物品交易系统毕设成品(2)网站功能
  16. 诚信优选团长发红包设计
  17. 今晚8点 | 矛与盾的对决——神经网络后门攻防
  18. ICLR2020国际会议精彩演讲抢先看(含源码)!!
  19. 网络供电(POE)的功率
  20. python计算器gui设计_Python 计算器界面设计

热门文章

  1. CSS样式表中的颜色表
  2. 中学计算机教育论文,【中学计算机教育互动式培养策略计算机教育论文材料】...
  3. linux如何拿到文件的返回值,linux 下read函数返回值分析
  4. AJAX()请求参数
  5. 无限循环的二进制小数怎么精确转换为十进制小数
  6. currency conversion/ 货币转换 / currency translation
  7. uni-app小程序使用小程序码绑定用户信息合成海报
  8. HCIP考试考哪三门你知道么?
  9. 循迹智能车红外模块的选取
  10. jenkins安装github插件后还是找不到 Build when a change is pushed to GitHub