现在客户的基础数据库是英文字符集,我们的软件需要连接这个数据库并将数据显示出来。
现在的问题就是基础数据库是上级部门管理不能动,显示的中文为乱码。
有没有在不改动基础数据库的前提下,正确的显示出中文?

解决方案 »

  1.   

    你要在那儿显示中文?是你开发代码显示的数据。用什么开发语言?
    亦或是PL/SQL Developer中显示中文?
      

  2.   

    数据库是英文的没有关系,重要的是是否是UTF格式的,如果是的话,只要客户端字符集设置正确,是可以正常显示中文的 
      

  3.   

    回1楼和2楼:
    这个系统有两个数据库,一个是基础数据库,是他们上级部门提供的,由于历史原因,英文字符集的。还有一个是我们自己的业务数据库,是中文字符集的。
    需要在代码里显示中文,同时有的数据也需要放入我们的业务数据库,代码是用微软的ASP.NET MVC2 做的。客户端的字符集设的是中文字符集。现在的问题就是基础数据读出来的中文全显示是问号。
    我们自己的业务数据库里的中文是正常的
      

  4.   

    回2楼。
    既然是英文字符集的,那肯定是ASCII编码的
      

  5.   

    .net连Oracle一般只有三种方式1.  用Oracle的.net驱动,WE8ISO8859P1字符集会乱码,必须要求数据库用中文字符
    集才能支持2.  用OLEDB的微软驱动方式,能很好的解决WE8ISO8859P1字符集乱码问题,但是对于
    Blob字段类型不支持,只支持Long Raw类型,但是在一个表中只能存在一个Long Raw类
    型,另外Long Raw类型不支持从一个表insert到另外一个表的操作3.  用OLEDB的Oracle驱动方式,能支持Blob类型,WE8ISO8859P1字符集显示中文也正
    常,但是保存中文数据,每个中文HEX编码会全部变成”BF”,两个BFBF变成一个
    “靠”字,导致中文乱码不换字符集需要转码,给你参考一上
    public static void DeDataTable(DataTable dataTable)
    {
        Encoding encoding = Encoding.GetEncoding("iso-8859-1");
        Encoding srcEncoding = Encoding.GetEncoding("gb18030");
        Encoding dstEncoding = Encoding.GetEncoding("unicode");
        string s = "";
        foreach (DataRow row in dataTable.Rows)
        {
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                if (dataTable.Columns[i].DataType == Type.GetType("System.String"))
                {
                    s = row[i].ToString().TrimEnd(null);
                    byte[] bytes = encoding.GetBytes(s);
                    byte[] buffer2 = Encoding.Convert(srcEncoding, dstEncoding, bytes);
                    s = new string(dstEncoding.GetChars(buffer2));
                    row[i] = s;
                }
            }
        }
        dataTable.AcceptChanges();
    }