c#口口乱码_C#.NetCore读取配置文件中文出现乱码问题深入分析
c#⼝⼝乱码_C#.NetCore读取配置⽂件中⽂出现乱码问题深⼊
分析
前⾯⽂章已经说明出现问题,本⽂主要深⼊分析⼀下原因,不要只是⽹上搜答案,把配置⽂件改成UTF-8就算完成任务了。
1,先看问题重现
建⼀个控制台应⽤程序,添加了个json⽂件如下//jsconfig1.json
{
"exclude": [
"**/bin",
"**/bower_components",
"**/jspm_packages",
什么网游好玩
清晨励志一句话"**/node_modules",
"**/obj",
开饰品店
"**/platforms"
],
"test": {
fc勇者斗恶龙3攻略"t1": "aa",
"t2": "中aa"
}
}
编写重现代码,需要引⼊
//这⾥需要引⼊三个包
IConfiguration c;
var builder = new ConfigurationBuilder()
xml文件怎么打开.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("jsconfig1.json");
c = builder.Build();
var str = c["test:t2"]; //重现乱码
2.什么原因?因为vs中配置⽂件,就是这个.json是以ANSI编码⽅式存储的,ANSI编码各国是不兼容的,不同国家操作系统⽤的编码⽅式不⼀样,中国以GBK⽅式,⽇本以JS编码等等。
但是,程序⾥⾯读取内容却是以Encoding.Default⽅式来解码,⽽vs2017中Default就是UTF-8所以所程读出为乱码,所以按以前的⽅式把json⽂件保存是UTF-8就可以了,可能好多解决问题就这样试,改成GBK,改成UTF8能⾏就可以了,但是深⼊原因没去研究,这⾥我们就把这⾥研究清楚。
3.另⼀种⽅式,如果我们不改⽂件编码⽅式能不能搞定,能。
我们注册⼀下,就可以⽤GB2312,GBK都可以解码出来就是正常的内容了,因为编码解码⼀样就正常了,前⾯⼀篇⽂章有特别聊聊编码的,传送
如果我们清楚计算机内部存储,其实都是byte,都是0101,都是数字,我们甚⾄可以⾃⼰构造出字符来,⽐如
这⾥214,208,97,97 就是以GBK⽅式编码的字节,如果我们按着这种⽅式解码出来就是 中aa。
戏剧影视美术设计到这⾥我们⾄少对编码读取解码有了⼀定了解,当以后出来乱码的时候⼀定是编码解码不⼀致导致的。其实这⾥也不是深⼊了解,再深⼊应该是编码的规则,字节等东西,不过到这⼀步已经⽐较清楚了。
最后扯点其他的,前⾯那篇⽂章,我有提到宽字节,unicode,vs⾥⾯直接量字符串确实是⽤的unicode,(utf16)⽅式编码的,aa在内存⾥就是97,0,97,0,⽽不是上⾯我说的97,97,这个是有差别的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。