我的环境:  服务器:SERVER 2000, 软件C#2003  WEB设置是(    <globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" uiCulture="zh-CN"/>)数据库是ORACLE 字符:al16utf16  注册码:AMERICAN_AMERICA.WE8ISO8859P1我从ORACLE查出资料放在DATAGRID里,就出现乱吗了,显示形式为:
  2005070112581707 ±¨?ˉê±??£o2005-07-01 12:58:17 ??±¨£o?ú·é?ì?·???í?·?ú£??òμ?é£?t?éD???3죨1eB50517£?3μ??±???£?±?íμá?ì¨??é?μ????£  ?÷è???á?£ooì1a′ó?ó3??ˉ?£êü?ˉè?£oáú 
 -----------------------这里汉字是乱吗,数字还是可以正常显示的.
DATAGRID之外的汉字都是正常显示.

解决方案 »

  1.   

    你是说 换成 utf-8,还是不行的
      

  2.   

    你用的是ORACLE哪个版本,服务器的字符集是什么?
    AMERICAN_AMERICA.WE8ISO8859P1代表是英文字符集,这个设置是在服务器上还是工作站上,你是否能确定工作站和服务器使用了相同的字符集?
    你为什么不用中文字符集?SIMPLIFIED CHINESE_CHINA.ZHS16GBK
      

  3.   

    我的查询是这样写的:
    strConn = ConfigurationSettings.AppSettings["SP"];
    cn= new OracleConnection(strConn);
    cmd = new OracleCommand("temp.get",cn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Connection.Open();
    OracleCommandBuilder.DeriveParameters(cmd);
    cmd.Parameters["in_TiaoJiao"].Value = strCommand.ToString().Trim();
    cmd.Connection.Close();
    da = new OracleDataAdapter(cmd);
    da.Fill(ds,"view_an_qing_xin_xi_father,view_an_jian_lei_bie_tree,zhong_dui");
    if(ds.Tables["view_an_qing_xin_xi_father,view_an_jian_lei_bie_tree,zhong_dui"].Rows.Count > 1)
    {
    dgrdAlarm.DataSource =ds;
    dgrdAlarm.SelectedIndex=-1;
    dgrdAlarm.CurrentPageIndex=0;
    dgrdAlarm.DataBind();
    }听说参数加上System.Text.Encoding.Default就可以,但是不知道加在那里
                                __________________________________鹏
      

  4.   

    dukejx(丢丢)  ORACLE 里的字符集我没有办法改动。
      

  5.   

    怎么不能改,客户端修改注册表就行,服务器上也可以修改系统表进行修改,但如果你已经有了数据,则改动后还会是乱码,没有数据就可以改。
    你没有回答我以上的问题,我不好帮你,你首先确定一下是不是数据库的字符集不匹配造成的,你在你的机器上运行ORACEL工具,查询一下表的内容,看看是不是乱码,如果是那是数据库的事,如果不是那是.NET的事,回来在跟你说,你先做一下!!!
      

  6.   

    我的服务器 和客户端用的都是AMERICAN_AMERICA.WE8ISO8859P1
      

  7.   

    你到是说清楚点呀,我刚才问你的问题都先回答我,要不我怎么帮你!!!你用的是ORACLE哪个版本,服务器的字符集是什么?
    AMERICAN_AMERICA.WE8ISO8859P1代表是英文字符集,这个设置是在服务器上还是工作站上,你是否能确定工作站和服务器使用了相同的字符集?
      

  8.   

    ORACLE版本你知道吧!
    select * from sys.PROPS$ where name ='NLS_CHARACTERSET'察看服务器上的字符集
    注册表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG 察看工作站字符集
    如果不一样,应该将工作站的字符集进行修改
      

  9.   

    我的服务器 和客户端用的都是AMERICAN_AMERICA.WE8ISO8859P1不可能,如果一样,你在ORACLE工具中查询就不可能是乱码......
    除非,你ORACLE中的数据本身就是乱码,数据你是怎么输进去的???使用IMP导进去的吗?
      

  10.   

    我这里没有工作站,我用的是一台电脑.既是服务器也是客户端.ORACLE 版本是9.02 
    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG  这里的是:AMERICAN_AMERICA.WE8ISO8859P1
    里面的资料是之前导入进去的
      

  11.   

    好像是要改Oracle的你当前使用的database的字符集地。
    我们公司这前也碰到乱码。其实最简单(如果允许的话)就是改数据库的字符集。
    你在客户端得费多大的劲啦
      

  12.   

    大哥,页面文字的编码要设在页面里面
    给你个例子
    <%@ Page language="c#" ContentType="text/html" ResponseEncoding="shift_jis" Codebehind="AdminUslist.aspx.cs" AutoEventWireup="false" Inherits="ChuouEdi.AdminUslist" %>
      

  13.   

    1、你在ORACLE工具查询的结果是乱码吗?
       你前面说的话好像是说“是乱码”,这就跟.NET无关,是你数据库的事情。
    2、ORACLE9I的客户端字符集设定是在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANG下,你可以看看,但应该也是AMERICAN_AMERICA.WE8ISO8859P1。
    3、你既然没有工作站,那说明不存在服务器和客户端字符集不匹配的情况
    4、你的数据是导入数据库的,你可以试试用INSERT语句往表里插一条带中文的数据,然后看看这条信息是否也是乱码
    5、我可以确定那是因为你的dmp文件(导入的数据文件)的字符集和你现在的数据库字符集不匹配,你在使用IMP命令导入时,应该有提示,你没有注意!这样的导入数据无论如何都是乱码!
    解决方法:
        方法一:
        1.你必须知道你在导出DMP文件的数据库的字符集!(肯定不是AMERICAN_AMERICA.WE8ISO8859P1)
        2.重新建立数据库,选择定制,注意有选择字符集的选项时,修改字符集的设置和你导出DMP的数据库字符集一致,然后修改注册表信息HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANG
        3.重新导入数据库文件
        方法二:
        1.使用update语句修改 sys.PROPS$ 的 NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET两项为你要修改的字符集的.后面的内容(如AMERICAN_AMERICA.WE8ISO8859P1就为WE8ISO8859P1)
        2.修改注册表
    方法一应该肯定没问题,方法二理论没有问题,但会受到你当初导入DMP文件时是否有其它问题存在(因为方法二不用重新导入DMP)所以没根。
    以上所属,是基于你目前在ORACEL工具中使用SQL语句会显示乱码的情况。
    不知道你明白吗?反正你说的话,我是不太明白(如:哦,我改了试下啊,发现问题改成那样后,数据库查处来到的都是乱码啊!!~)?
      

  14.   

    你的乱码如果是从Console打出来的。
    我感觉你不妨试试把字段类型改成nvarchar试试。或者由于上边看见了ISO-8859-1的字,试试吧去出来的字符串从iso-8859-1转成utf-8试试。oracle的配置,我一直是对付着走。所以恐怕帮不上你了。但是这两个办法,你也不妨一试吧,不好使不要怪我。
      

  15.   

    dukejx(丢丢)  我的意思是说我改动了字符集后,查出来的资料都是乱码来 ,之前没有改动字符集的话ORACLE里查出来的是正常显示。 你教我的都是改动ORACLE 字符集,数据库资料的来源跟我现在用的是一模一样的字符集,这个是可以肯定的. 所以到入进来的资料一定不会有问题.这样一来,好象问题不是在导入.
      

  16.   

    ghostberry(鬼鬼)  兄弟好,加上你哪个东西之后,乱码反而更多了,之前只是从数据库里带出来的资料是乱码,现在画面上LABLE的内容也变成乱码了,看来不是加 ContentType="text/html" ResponseEncoding="shift_jis"  这个东西了
      

  17.   

    dukejx(丢丢) 我到客户那里去试了, 他那里就没.有什么数据导入的问题了,但是还是一样出现乱码.所以看来不是数据的导入问题,
      

  18.   

    这回明白了,那就不是ORACLE的事了!
    System.Text.Encoding.Default只在对文件操作时有用,比如你打开文件或将datagrid的数据导出时,应该设置一下。
    你的问题应该是在web.config里
    前面说的将gb2312改为utf-8,不行吗?
    你是否改了全部?
    uiCulture="zh-CN"我觉得没用而且会受影响,你可以删掉试试或者改为uiCulture="en-US"
      

  19.   

    dukejx(丢丢) : 哦,我后来改成 <globalization fileEncoding="gb2312" requestEncoding="utf-8" responseEncoding="utf-8" /> 这样,还是不行, 以前全部改成 UTF-8 是不行的。我去试下 uiCulture="en-US"
     这个看看。
      

  20.   

    发现改成 uiCulture="en-US"
     之后还是不行。现在改动的地方好多,但是没有发现一个是正确的。有点头晕了
      

  21.   

    我之前用的是:
    OleDbCommand cmdSelect;
    cmdSelect = new OleDbCommand(strCommand,myConn);
    myConn.Open();
    OleDbDataReader myReader;
    myReader = cmdSelect.ExecuteReader();
    this.dgrdAlarm.DataSource = myReader;
    this.dgrdAlarm.DataBind();
    cmdSelect.Dispose();
    myConn.Close();
    用这样的查询时没有出现乱码,说明乱码还是 C#的原因。
    但是这样查询出来的资料没有换页的接口,所以又是剩下郁闷..................
      

  22.   

    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemdataoracleclientoracleconnectionclassconnectionstringtopic.asp看看是不是这个OracleConnection.ConnectionString 属性 的Unicode 设置!