5天问题未能解决,继续:1000分求获取oracle数据乱码问题,顶者有分,已结500分
问题描述:
1、开发环境:本地:XP+oracle9i+vs.net2003;数据存放在远程数据库oracle9i中编码字符集为American_America.US7ASCII
2、代码:
string cnString = ConfigurationSettings.AppSettings["ConnectionString"];
OracleConnection cn = new OracleConnection(cnString);
OracleCommand cmd = new OracleCommand();
cmd.Connection = cn;
cmd.CommandText = "GET_SE";
cmd.CommandType = CommandType.StoredProcedure;
OracleDataAdapter da = new OracleDataAdapter(cmd);
OracleDataAdapter da = new OracleDataAdapter("select se,mc from zsxx",cn);
DataSet ds = new DataSet();
da.Fill(ds,"SE");
DataGrid1.DataSource = ds.Tables["SE"].DefaultView;
DataGrid1.DataBind();
3、说明:字段se为NUMBER型,mc为nvarchar2,且mc为中文数据,就是这中文无法正常显示。
不能更改数据库,因为是远程数据库,只给查询权限!
4、试过的方法:
(1)修改过web.config文件<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312"/>
(2)另存为过显示页,并更改其保存编码。
查了很久也没能解决,希望达人帮助,分随你要,当然尽我所有了。国
(3)byte[] arr=System.Text.Encoding.UTF7.GetBytes(str);
前5个贴:
2006-11-4 16:36:46 http://community.csdn.net/Expert/topic/5133/5133256.xml?temp=.3269159
2006-11-3 13:57:30 http://community.csdn.net/Expert/topic/5130/5130920.xml?temp=.7877771
2006-11-2 17:22:49 http://community.csdn.net/Expert/topic/5128/5128785.xml?temp=.181637
2006-11-1 17:20:17 http://community.csdn.net/Expert/topic/5122/5122582.xml?temp=.7934992
2006-10-31 15:56:32 http://community.csdn.net/Expert/topic/5125/5125835.xml?temp=.6941645
问题点数:100、回复次数:71Top
1 楼lbiori241(残阳东升)回复于 2006-11-06 20:04:57 得分 1
我也遇到这样的问题,不知道怎么解决,帮你顶一下Top
2 楼webdiyer(.net资源精华—www.dotneturls.com)回复于 2006-11-06 20:15:07 得分 1
数据库编码为American_America.US7ASCII时保存的中文在数据库中不是乱码吗?如果数据库中就是乱码,那就难说了,还没有碰到过这种问题Top
3 楼weiqiaoxyz(魏大勇:情分比啥都重要!)回复于 2006-11-06 20:18:23 得分 1
没遇过这问题
之前用ORACLE弄过一个项目,是ASP写的,从未出现过楼主所说的情况!
帮顶了Top
4 楼liujia_0421(SnowLover)回复于 2006-11-06 20:45:32 得分 1
帮楼主顶了...
希望能解决,我也好学习一下...
Top
5 楼liujia_0421(SnowLover)回复于 2006-11-06 20:45:48 得分 1
再顶一下...Top
6 楼tqg1023()回复于 2006-11-07 07:59:18 得分 0
看来是没希望解决啦!!!!Top
7 楼leaohong(无定河)回复于 2006-11-07 08:00:41 得分 1
哎,LZ没去PUB问下么,在这用ORACLE的不多啊,友情帮顶Top
8 楼lizhizhe2000(武安侯)回复于 2006-11-07 08:14:48 得分 1
向楼主致敬!Top
9 楼tete(N多Flash-www.ndflash.com)回复于 2006-11-07 08:18:48 得分 1
帮顶,这么多天不解决,确实有点急啊
可以考虑到别的地方问问Top
10 楼Qim(莫名-从星做起......)回复于 2006-11-07 08:35:05 得分 1
建议给oracle公司打个电话问问。可行……Top
11 楼myminimouse(坚决不用baidu)回复于 2006-11-07 08:43:04 得分 1
帮顶~Top
12 楼hei__an(生活在黑暗中)回复于 2006-11-07 08:43:34 得分 1
帮楼主顶了...Top
13 楼qiaoxinwei(小新)回复于 2006-11-07 08:54:59 得分 1
顶帖才是硬道理Top
14 楼zlz_212(ShREk)回复于 2006-11-07 09:07:54 得分 1
一般在数据库中的数据就已经是乱码了。
最好能确认一下。Top
15 楼zlz_212(ShREk)回复于 2006-11-07 09:08:43 得分 1
如果不是乱码,可以在远程的机器上建立一个web service然后由本地调用Top
16 楼tdtdtdtdtd123(飘)回复于 2006-11-07 09:09:38 得分 1
dingTop
17 楼smile9961(good life)回复于 2006-11-07 09:14:54 得分 1
upTop
18 楼hexf_hn(天蓝)回复于 2006-11-07 09:39:09 得分 1
打电话给oracle,会有答案的。Top
19 楼hanguoji84(北飘)回复于 2006-11-07 09:47:55 得分 2
byte[] arr=System.Text.Encoding.UTF7.GetBytes(str);
这样写的方式不会有问题么?建议换成流的方式转下 byte,
你在配置文件中和页面保存的编码与代码页CS中的编码都要一致,这样才能避免乱码,建议页面的编码,配置文件的编码和你程序中的都要一致,即使是转换类型也用字节流的方式来转换,可以尝试下,小小的建议。Top
20 楼HJS1820(努力成為高手)回复于 2006-11-07 10:00:01 得分 1
幫頂Top
21 楼job_2006(初学.net)回复于 2006-11-07 10:03:37 得分 1
你丫的当我不识数,100当1000吼,^_^
帮顶帮顶,哈哈!~~Top
22 楼bJiao(乱搞)回复于 2006-11-07 10:28:49 得分 2
问题的关键是由于你的数据库编码是American_America.US7ASCII,中文保存进去时没有作处理,所以存进去的数据就是乱码。
除非保存数据时作处理,那么你取出来的数据就会是对的。
建议保存数据时用unicode编码,那样你可以正常显示。Top
23 楼greenberet007(阿宁)回复于 2006-11-07 10:32:52 得分 1
jfTop
24 楼tqg1023()回复于 2006-11-07 10:37:19 得分 0
回job_2006(初学.net)
呵呵,我是一天放100分,10天放1000分,而且,我的级别一次最高只能给100分呀。Top
25 楼cuizhanjun1981(城市稻草人)回复于 2006-11-07 10:44:00 得分 1
帮顶Top
26 楼Bird_fro(小方)回复于 2006-11-07 10:48:36 得分 1
只能帮顶了Top
27 楼TechieFeng()回复于 2006-11-07 10:49:54 得分 1
我也遇到这样的问题,不知道怎么解决,帮你顶一下
Top
28 楼123ppmove(迷茫)回复于 2006-11-07 10:51:45 得分 1
顶;;;;;;Top
29 楼Bird_fro(小方)回复于 2006-11-07 10:54:43 得分 1
没遇见过这类问题Top
30 楼penglewen(昨日如梦)回复于 2006-11-07 10:55:22 得分 1
只能顶一下.......Top
31 楼pol000(糊涂)回复于 2006-11-07 10:59:26 得分 1
顶一下.......Top
32 楼haok123(恭喜发财)回复于 2006-11-07 11:01:49 得分 1
一天100 你有多少分??Top
33 楼wangfeng0215(浪子)回复于 2006-11-07 11:07:39 得分 1
顶Top
34 楼crystal521(【云淡风轻】)回复于 2006-11-07 11:08:03 得分 1
先顶再说Top
35 楼cjmdaixi()回复于 2006-11-07 11:24:55 得分 1
狂定,时刻关注中!!Top
36 楼zhangyunqi()回复于 2006-11-07 11:30:18 得分 1
upTop
37 楼wanghu830424(阿虎)回复于 2006-11-07 11:39:45 得分 1
upTop
38 楼lch1234(枫)回复于 2006-11-07 11:41:17 得分 1
顶!!Top
39 楼lkh42002(HAI)回复于 2006-11-07 11:44:19 得分 1
↑↑↑↑↑↑
↑↑↑↑↑↑Top
40 楼sunjiane()回复于 2006-11-07 11:52:28 得分 1
先顶一个再研究Top
41 楼CloneCenter(复制中心)回复于 2006-11-07 11:59:53 得分 1
不知道数据库中会不会有问题,另外再看看客户端的字符集是什么,有可能和本地的这个客户端字符集有关系。
看这个注册表键值:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0有一个键值:NLS_LANGTop
42 楼jackyped(MSN: jpu_jacky@eyou.com)回复于 2006-11-07 12:00:34 得分 1
我也遇到过
如果通过数据库编辑工具写汉字进去,读出来的就是汉字;
如果通过程序写汉字进去,完蛋了,再打开数据库看,都是乱码的。
在网上翻了很久没解决。
帮顶一下!Top
43 楼liujia_0421(SnowLover)回复于 2006-11-07 12:03:44 得分 1
再帮忙顶吧...
早日解决吧...Top
44 楼yangtu86(杨土)回复于 2006-11-07 12:18:56 得分 2
跟我的问题差不多。
试试
换一个数据库联接方式。
“Data Source=MyOracleDB;Integrated Security=yes;”
“Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;”
“Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=myUsername;Pwd=myPassword;”
http://www.connectionstrings.com/Top
45 楼test33(隐姓埋名)回复于 2006-11-07 12:38:45 得分 1
路过,顶过`Top
46 楼yujiasw()回复于 2006-11-07 12:51:01 得分 1
关注
Top
47 楼mlyb()回复于 2006-11-07 12:52:55 得分 1
支持一下,搂主忽悠人了,哈哈Top
48 楼cityhunter172(寒羽枫)回复于 2006-11-07 12:53:20 得分 10
花了几个小时时间,实验了 N 次,终于搞定 UTF-7 与 UTF-8 之间的转换
其它类型的楼自己写吧
System.Text.Encoding en8 = System.Text.UTF8Encoding.UTF8;
//首先要确保 this.TextBox1.Text 此时没有出现乱码,然后将其转成 char[]
char[] ch8 = en8.GetChars(en8.GetBytes(this.TextBox1.Text));
System.Text.Encoder ed7 = System.Text.UTF7Encoding.UTF7.GetEncoder();//获取 UTF7 的编码器
byte[] bt7 = new byte[ed7.GetByteCount(ch8,0,ch8.Length,true)];//初始化存放 UTF7 编码的 byte[]
ed7.GetBytes(ch8,0,ch8.Length,bt7,0,true);//从 char[] 得到 UTF7 编码的 byte[]
this.TextBox2.Text = System.Text.UTF7Encoding.UTF7.GetString(bt7);//由 byte[] 得到 UTF7 编码的字串
//最好把上述 UTF7 的字串,以通过存储过程进行 Insert Update 操作
//下列是从数据库中读取的 UTF7 转成 UTF-8,其实是一样的,你自己把它写成函数吧
System.Text.Encoding en7 = System.Text.UTF7Encoding.UTF7;
//首先要确保 this.TextBox1.Text 此时没有出现乱码,然后将其转成 char[]
char[] ch7 = en7.GetChars(en7.GetBytes(this.TextBox2.Text));
System.Text.Encoder ed8 = System.Text.UTF8Encoding.UTF8.GetEncoder();//获取 UTF8 的编码器
byte[] bt8 = new byte[ed8.GetByteCount(ch7,0,ch7.Length,true)];//初始化存放 UTF8 编码的 byte[]
ed8.GetBytes(ch7,0,ch7.Length,bt8,0,true);//从 char[] 得到 UTF8 编码的 byte[]
this.TextBox3.Text = System.Text.UTF8Encoding.UTF8.GetString(bt8);//由 byte[] 得到 UTF8 编码的字串Top
49 楼free_wang()回复于 2006-11-07 12:59:36 得分 1
upTop
50 楼job_2006(初学.net)回复于 2006-11-07 13:02:13 得分 0
tqg1023() ( ) 信誉:100 Blog 2006-11-07 10:37:00 得分: 0
回job_2006(初学.net)
呵呵,我是一天放100分,10天放1000分,而且,我的级别一次最高只能给100分呀。
========
开玩笑啦,哈哈
俺不懂oracle9i咯,帮你顶顶顶顶顶顶顶Top
51 楼H5K_kf()回复于 2006-11-07 13:21:55 得分 1
帮顶,等待高手指点。Top
52 楼whtportland(我是一朵漂浮的云) (总有一种力量它让我们抖擞精神)回复于 2006-11-07 14:01:41 得分 1
关注……Top
53 楼ylhyh(----------> www.cnpp.info <----------)回复于 2006-11-07 14:06:10 得分 3
楼主,给你个方法吧
1.数据驱动不要用OracleClient,改用OLEDB
2.用OleDB连接Oracle时:
OLEDB的连接字符串里,Provider不要用OraOLEDB.Oracle或OraOLEDB.Oracle.1,而是用MSDAORA或MSDAORA.1
好了,不会乱码了
ref: http://topic.csdn.net/T/20050817/14/4214073.html
Top
54 楼cityhunter172(寒羽枫)回复于 2006-11-07 14:25:12 得分 5
System.Text.Encoding.GetEncoding("gb2312").GetString(bt7)//获取简体
System.Text.Encoding.GetEncoding("big5").GetString(bt7)//获取繁体
要是实在不行,就用下列办法吧,………
System.Text.Encoding u8 = System.Text.UTF8Encoding.UTF8;//此处由你的 Web.config 与页面的 charset 决定
byte[] bt = u8.GetBytes(this.TextBox1.Text);
this.TextBox2.Text = System.Convert.ToBase64String(bt); //Base64 编码后的字符,一个字符将产生 4 个字母
bt = System.Convert.FromBase64String(this.TextBox2.Text);
// System.Text.Encoding u8 = System.Text.UTF8Encoding.UTF8;
this.TextBox3.Text = u8.GetString(bt);//由 Base64 编码还原成字符Top
55 楼poorman19821018(流光飞舞)回复于 2006-11-07 14:31:00 得分 1
学习中,帮顶一下Top
56 楼bjgzxx(食人一族)回复于 2006-11-07 14:43:55 得分 2
我感觉UTF-8应该没问题Top
57 楼xgcom(xg)回复于 2006-11-07 14:53:06 得分 2
第一:用utf-8 编码,
第二:在本地搞一个相应的oracle数据库,方便查找原因。Top
58 楼dd_zhouqian()回复于 2006-11-07 15:23:53 得分 2
utf8, 我觉得这样可以解决问题
还有你在客户端查询,其实乱麻问题可能出现在客户端
另外你的数据库端用的是什么字符集建库的和这也有一定的关系
Top
59 楼raozhiven(朗屹)回复于 2006-11-07 15:30:02 得分 2
1、我想请问楼主,中文是如何存入数据库中的?
2、实在不行,就一个一个的试吧,无非就那么几种编码
System.Text.Encoding.Default.GetString(System.Text.Encoding.UTF7.GetBytes(strValue));
或
System.Text.Encoding.Default.GetString(System.Text.Encoding.UTF8.GetBytes(strValue));
Top
60 楼raozhiven(朗屹)回复于 2006-11-07 15:35:03 得分 5
http://topic.csdn.net/t/20040422/11/2995540.htmlTop
61 楼dan0926()回复于 2006-11-07 15:36:35 得分 1
接分~~Top
62 楼raozhiven(朗屹)回复于 2006-11-07 15:38:45 得分 2
http://blog.csdn.net/fan178/archive/2006/10/18/1339560.aspxTop
63 楼yaomin1985()回复于 2006-11-07 15:39:12 得分 1
帮你顶。。。。。。。。Top
64 楼l149778198()回复于 2006-11-07 15:41:51 得分 1
不知道 帮你定义个了Top
65 楼tqg1023()回复于 2006-11-07 16:28:04 得分 0
cityhunter172(寒羽枫)
对于数据库,我只有查询权!Top
66 楼yoshiki1895(养只水母玩玩)回复于 2006-11-07 16:39:13 得分 1
UPTop
67 楼cityhunter172(寒羽枫)回复于 2006-11-07 17:03:53 得分 11
那你的数据是怎么 Insert 与 Update 的?
我写的那些都是在放入数据库之前进行转码,从数据库取出后再进行反向转码。
楼主没明白?????
如果没有 Insert 与 Update 的权限,只是单纯的 Select 数据
那么乱码不是你的错,是存放数据的错。
因为若不作处理,放入时就已经产生乱码
就好比在 requestEncoding="gb2312" 条件下,charset='gb2312' 简体页面中输入繁体字,送到 Web 服务器就已是乱码,更不用说存入数据库了Top
68 楼tqg1023()回复于 2006-11-07 17:12:57 得分 0
数据输入程序是其它公司用JAVA作的。Top
69 楼Glen_qiu(简约)回复于 2006-11-07 17:31:56 得分 0
cmd.Connection = cn;
cmd.CommandText = "GET_SE";
cmd.CommandType = CommandType.StoredProcedure;
OracleDataAdapter da = new OracleDataAdapter(cmd);
OracleDataAdapter da = new OracleDataAdapter("select se,mc from zsxx",cn);
DataSet ds = new DataSet();
da.Fill(ds,"SE");
DataGrid1.DataSource = ds.Tables["SE"].DefaultView;
DataGrid1.DataBind();
这一个DATASET 存了二个表记录..只存一个试下.看可不可以解决Top
70 楼huazi4995(華仔)回复于 2006-11-07 18:23:36 得分 0
string str=System.Text.Encoding.Unicode.GetString(ds.Tables["SE"].Rows[0]["mc"]);
试试这个Top
71 楼huazi4995(華仔)回复于 2006-11-07 18:29:02 得分 0
byte [] b=System.Text.Encoding.Unicode.GetBytes(ds.Tables["SE"].Rows[0]["mc"].ToString());Top




