C#.net 中的编码 -Encoding

   在c#中提供了编码类Encoding,它有四种编码方案:

1、ASCIIEncoding
2、UnicodeEncoding
3、UTF7Encoding
4、UTF8Encoding

     另外还有我们所熟悉的GB2312编码,但是它不是Encoding类下的显示类。尽管如此我们仍然可以使用,Encoding encoder = Encoding.GetEncoding("gb2312");
 各种编码类型不一定是兼容的,尤其是在有中文的情况下。在解码从文件读取字节数据时,这一点有重要的影响。
     例如:用unicode编码方案写入的数据不能使用ASCII或UTF-8编码方案正确的解码。这是因为unicode编码使用两个字节表示每个字符,而其他方案不是这样。

1、首先来看一下编码后的字节数组内容
     我们写了以下程序进行验证这一点:
     对于这段字符串 string str="测试文本 Test Text" 分别通过GB2312和UTF8对其进行编码,得到以下字节数组:
     ——————————-GB2312—————–
   178   226   202   212   206   196   177   190   32   84   101   115   116   32   84   101   120   116

     ——————————UTF8——————
   230   181   139   232   175   149   230   150   135   230   156   172   32   84   101   115   116   32   84   101   120   116
  
可以看出对于中文两者编码后的字节是不一样的,对于英文和空格的编码是一样的。

2、两种编码方案保存到文本的情况
    对于同一段字符串 string str="测试文本 Test Text" 分别通过GB2312和UTF8对其进行编码,然后分别保存为两个文本文件,代码如下:

private void GetUTF8()
  {
   Encoding encoder=Encoding.UTF8 ;
   byte[] buff = new byte[encoder.GetByteCount(str)] ;
   int j = encoder.GetBytes(str,0,str.Length,buff,0) ;
   this.textBox1.Text += "
——————————-UTF8——————
";

   for(int i=0;i<buff.Length;++i)
   {
    this.textBox1.Text += "   "+buff[i];
   }
   FileStream fs = File.Create(@"E:WinFormWindowsApplication1WindowsApplication1UTF8.txt");
   fs.Write(buff,0,buff.Length) ;
   fs.Close();
  }

打开记事本都可以正常显示中文,接下来在对文本进行读取显示:
A、用GB2312方案读gb2312写入的文本显示正常

  FileStream fs = File.OpenRead(@"E:WinFormWindowsApplication1WindowsApplication1GB2312.txt");
   byte[] buff = new byte[(int)fs.Length] ;
   fs.Read(buff,0,buff.Length);
   Encoding encoder = Encoding.GetEncoding("gb2312");
   string str1 = encoder.GetString(buff,0,buff.Length);
   this.textBox1.Text = "————-GB2312 Encode—————-
" + str1 +"
";

B、用Gb2312方案读取Utf8编码写入的文本显示如下:
    ? Test Text
C、用UTF8读取GB2312写入的文本显示如下:
   娴????? Test Text
这正是我们经常遇见的乱码,多少情况都是编码方案不对应。

一般来说我们都采用UTF8进行编码,在网络中传输数据都默认这种方式。

zend studio 5.5 改为简体中文版的办法

不知道是不是中国购买zend产品的用户太少了还是我安装的问题,装好后桌面选项中竟然没有“简体中文”的语言选项了,到配置文件夹里看了一会,在 {X}:Documents and Settings{User}DEconfig_5.{x}desktop_options.xml文 件中

<customized_property ID="desktop.language">
  <locale language="en" country="" variant=""/>
</customized_property>

将en改为zh,重启zend后就可以了。

IBM:使用PHP将XML转换为JSON

        IBM的程序员工作组发表了一个使用PHPXML转 换为JSON的有趣文章。乍一看起来,似乎有一个“为什么要转换它们”的疑问。因为XML和JSON有着相似的目的和作用,可是很多时候,在浏览器中处理 JSON数据会比XML要容易的多,以前很多的Web服务会返回XML,必须再经过转换处理才能够使用。这就是IBM发表该文章的由来,这里引用了一部分 文章中的内容"越来越多的应用程序需要将XML数据转换为JSON,个别的基于Web的服务也突然出现了这样的转换功能,IBM的T.J.Watson研究中心开发了 一种特别的方法去使用PHP来实现转换,这种方法接受XML的输入,并且输出转换为JSON格式的数据,这个基于PHP的解决方案提供了几个优点:
                 1,可以运行在离线模式下,用命令行来执行
                 2,包含一个已经存在的服务器内置代码
                 3,在Web主机上轻松的使用Web Service服务
        如果你正在网站工作,特别是你需要使用其他网站提供的Web Service获取数据到自己的网站,那么你就应该读一下这篇文章。它很简短,假如你之前比较熟悉XML和JSON,那么可以跳过“基础”部分,了解文章的具体内容和代码请访问:
http://www-128.ibm.com/developerworks/xml/library/x-xml2jsonphp/