Case:同样的代码,本地开发环境(local is Chinese Simplify)可以成功运行,但是放到Windows Server 2008 R2(Local is United State) 上,同样的代码失败了。最后跑到server上用vs2012 获取最新代码发现所有的中文都是乱码。
Solution1:只该代码,其它设置不变(server 上的是设置不是我们这些小兵想动就可以动的)。我写了两个方法。
1 public bool CompareChineseString(string flagString,string garbageString) 2 { 3 // string flagStr = "備註"; 4 string nomalString=string.Empty; 5 ConvertGarbageStringToChinese(garbageString,ref nomalString); 6 if (flagString.Contains(nomalString)) 7 { 8 return true; 9 } 10 else 11 { 12 return false; 13 } 14 } 15 public void ConvertGarbageStringToChinese(string garbageString, ref string noamlString) 16 { 17 // string utfinfo = "‚äÔ]"; 18 Encoding defaultEncoding = Encoding.Default; 19 Encoding gb18030 = Encoding.GetEncoding("gb18030"); // It can also used "gb2312" 20 byte[] bytes = defaultEncoding.GetBytes(garbageString); 21 noamlString = gb18030.GetString(bytes); 22 }
在方法ConvertGarbageStringToChinese()中,我们取得是当前系统的Encoding 方式。对于Encoding设置各个系统的会有差异,我们可以用C# 的方法 来查看Encoding.Default.EncodingName。由于我们所用的server上 用的encoding 的code page 的名称是windows-1252。但是我们本地用的是:gb2312,所以程序在本地可以运行成功,但是server上会出现乱码,所以不成功。
下面看一下调用:
1 string flagStr = "備註"; 2 string utfinfo = "‚äÔ]"; 3 using (ConvertChineseWithDiffEncoding compareMethod = new ConvertChineseWithDiffEncoding()) 4 { 5 if (compareMethod.CompareChineseString(flagStr, utfinfo)) 6 { 7 Console.WriteLine("the same"); 8 } 9 else 10 { 11 Console.WriteLine("different"); 12 } 13 }
在我们的环境下,flagStr 是从excel 中读取的,所以这里就设成一个正常值。另一个传入的字符串就是乱码部分了,也就是将要处理的。
Solution2:更改visual studio 的TextEditor设置(For example vs2012):
Tools -> Options -> Auto-detect UTF-8 encoding without signature
select the checkbox.
Solutin3:control panel -> Language, and Region ->Region ->Administative tab -> Change system locale:-> select Chinese( simplified,China) from the dropdownlist.