| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5984 人关注过本帖, 1 人收藏
标题:C#写入Oracle 中文乱码???? 江湖求救!!!!
只看楼主 加入收藏
sjf_2005
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-6-18
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:3 
C#写入Oracle 中文乱码???? 江湖求救!!!!
oracle的字符编码为 ZHS16GBK
C#中Encoding.Default为"GB2312"

我可以读取Oracle数据库中已有的中文内容,并能正确显示(Oracle中的中文通过SQLplus录入),但当我使用C#程序插入中文记录时,发现数据库中显示为乱码,读取出来也为乱码。我试了很多种编码方式,问题都不能解决,求高手解答!!!
搜索更多相关主题的帖子: Oracle 乱码 江湖 中文 
2010-06-18 10:25
sjf_2005
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-6-18
收藏
得分:0 
自己已解决。
主要问题是: oracle客户端软件的字符编码与服务器端的字符编码不一致造成的。

oracle服务端字符编码为: ZHS16GBK
oracle客户端字符编码为:  WE8ISO8859P1

解决办法有三种:
(1)修改客户端注册表: 找到Oracle安装注册项下的NLS_LANG,将其值改为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK
(2)通过调用_putenv函数,在程序中用代码设置:
using System.Runtime.InteropServices;
...
[DllImport("msvcrt.dll")]
private static extern int _putenv(string str);
...
_putenv("NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK");
//数据库操作
_putenv("NLS_LANG = AMERICAN_AMRICA.WE8ISO8859P1");
(3)通过C#自带的函数设置环境变量
System.Environment.SetEnvironmentVarible("NLS_LANG "," SIMPLIFIED CHINESE_CHINA.ZHS16GBK");
//数据库操作
System.Environment.SetEnvironmentVarible("NLS_LANG ","AMERICAN_AMRICA.WE8ISO8859P1");

需要注意的是: 第二、三种利用函数进行设置环境变量的操作必须在数据库操作的外边才能生效。
2010-06-18 16:28
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:10 
高手

★★★★★为人民服务★★★★★
2010-06-18 20:54
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:10 
人才

C#超级群 74862681,欢迎大家的到来!
2010-06-18 21:34
快速回复:C#写入Oracle 中文乱码???? 江湖求救!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015726 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved