常建57

路漫漫其修远兮。。。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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         }
View Code

在方法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             }
View Code

在我们的环境下,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.

 

posted on 2013-12-01 19:50  常建57  阅读(419)  评论(0编辑  收藏  举报