如何显示指定C#客户端从数据库取结果时的编码格式

qiuzhuoxian 2010-02-02 09:34:45
C#客户端
使用oracle client连接数据库

现在数据库使用的是GBK编码
维语在数据库中是乱码,全是问号,因为GBK编码中没有维语的码段

现在通过调试,发现C#客户端取来数据时就已经是乱码,因为貌似使用的缺省编码是GB2312
然后再经过任何编码转换,都不起作用。

但是用文本文件做过测试,如果是用GB18030的方式去读,
结果能正确显示

现在想知道,去数据库里取数据的时候能指定编码格式么?
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuzhuoxian 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feifei313116 的回复:]
直接转成二进制数据存到数据库中,然后取出来后在转成string形式就好了,应该没问题,我以前做过类似的东西
[/Quote]
能不能说的再详细点呀
数据库是不能再动了
最多只能动上层
jimh 2010-02-02
  • 打赏
  • 举报
回复
首先,你用什么驱动访问数据库存入数据的?直接查看数据库显示乱码没关系,用同样的驱动读回来就是了,不用管数据库什么编码,最大不能直接查看数据而已。
feifei313116 2010-02-02
  • 打赏
  • 举报
回复
直接转成二进制数据存到数据库中,然后取出来后在转成string形式就好了,应该没问题,我以前做过类似的东西
yue_shanglin 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qiuzhuoxian 的回复:]
引用 2 楼 feifei313116 的回复:
直接转成二进制数据存到数据库中,然后取出来后在转成string形式就好了,应该没问题,我以前做过类似的东西

能不能说的再详细点呀
数据库是不能再动了
最多只能动上层
[/Quote]
你最好在数据库中查询一下,看看是不是乱码,如果在数据库中直接查询的时候都是乱码,就会出问题的。至于查询的时候,其实DataReader查询出来的都是Object的,就看你怎么转型,如果是字符串的话,都可以直接转换成C#的string的。C#的char是32位的,包含了所有的Unicode字符,所以,转换成C#的编码是没有问题的。如果真要从二进制数据读的话,应该就更没问题了。

SqlDataReader reader = ...;
reader.Read();
byte[] databuffer1 = (byte[])reader[0];
string datastr_ascii = Encoding.ASCII.GetString(databuffer1);
//如果用gb2312编码可以这样
string datastr_gb2312 = Encoding.GetEncoding("gb2312").GetString(databuffer1);

你看看这样还是不是乱码?
你妹的特盗不 2010-02-02
  • 打赏
  • 举报
回复
这个,你要先存进去不是乱码才行吧,存进去都是乱码了,你读出来,随便怎么搞也是乱码啊
qiuzhuoxian 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jimh 的回复:]
首先,你用什么驱动访问数据库存入数据的?直接查看数据库显示乱码没关系,用同样的驱动读回来就是了,不用管数据库什么编码,最大不能直接查看数据而已。
[/Quote]
我用Oledb读的
而且还设置了
atuo translate= false
都不行

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧