C#插入oracle中文变成“靠靠靠”,怎么解决

空白桑 2017-09-04 10:51:40
如题 ,
服务端暂时还没调整
服务端编码是:AMERICAN_AMERICA.WE8ISO8859P1
本机注册表项NLS_LANG、环境变量都对应修改了

最开始使用微软的OracleClient , 查询结果直接就是乱码 改编码后查询正常,插入的中文变成“?”之类的特殊字符

然后用OleDb, 查询结果正常,插入中文都变成了 “靠靠靠” 网上找了很多 改注册表项 、 编码之类的 , 都没啥用 头大 。。。

有大神了解这个问题咋解决么 ?
...全文
650 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
空白桑 2017-09-06
  • 打赏
  • 举报
回复
算是解决了 比较迂回 。 服务端编码是AMERICAN_AMERICA.WE8ISO8859P1 客户端注册表NLS_LANG:AMERICAN_AMERICA.WE8ISO8859P1 环境变量同上 这样读取中文用oledb是没问题的 连接字符串Provider=oraoledb.oracle...... (网上有说写成 Provider = MSDAORA.1 这个貌似不太支持64位系统 直接连接不上数据库) 插入或是更新中文会变成“靠靠靠” 所以需要在执行SQL之前进行一次转码 执行的语句是:update borderdetail set bodname='大红大好的撒快点哈杀戮空间打开了' 实际上是:update borderdetail set bodname='´óºì´óºÃµÄÈö¿ìµã¹þɱ¾¿Õ¼ä´ò¿ªÁË' 转码方法:

public string ToChString(string str)
        {
            System.Text.Encoding gbk_encoder = System.Text.Encoding.GetEncoding("gb2312");
            byte[] bs = gbk_encoder.GetBytes(str);
            char[] cs = new char[bs.Length];
            for (int i = 0; i < bs.Length; i++)
                cs[i] = Convert.ToChar(bs[i]);
            return new String(cs);
        }
dy00544 2017-09-06
  • 打赏
  • 举报
回复
你这明显是服务器的编码没设置对。
空白桑 2017-09-06
  • 打赏
  • 举报
回复
引用 6 楼 xian_wwq 的回复:
[quote=引用 2 楼 ck7193 的回复:] [quote=引用 1 楼 xian_wwq 的回复:] 修改系统的区域和语言设置试下 具体步骤: 控制面板-区域和语言-管理-非Unicode程序的语言-更改系统区域设置
改成啥 ? [/quote] 要正常显示中文,改成中文试试 强调下,不是客户端的,是服务器的 [/quote] 服务器就是中文的
xuzuning 2017-09-05
  • 打赏
  • 举报
回复
现在的数据库系统都被设计成很人性化的了,你只要告诉他你需要操作字符集的数据,转换工作都由他完成
xuzuning 2017-09-05
  • 打赏
  • 举报
回复
连接数据库时指定字符集 zhs16gbk 或 utf-8(一般只用这两种要和你的程序字符集一致) 另外可关闭连接时的自动识别字符集开关
拜一刀 2017-09-05
  • 打赏
  • 举报
回复
烫烫烫我知道,靠靠靠我就...
xian_wwq 2017-09-05
  • 打赏
  • 举报
回复
引用 2 楼 ck7193 的回复:
[quote=引用 1 楼 xian_wwq 的回复:] 修改系统的区域和语言设置试下 具体步骤: 控制面板-区域和语言-管理-非Unicode程序的语言-更改系统区域设置
改成啥 ? [/quote] 要正常显示中文,改成中文试试 强调下,不是客户端的,是服务器的
空白桑 2017-09-05
  • 打赏
  • 举报
回复
有人造吗
空白桑 2017-09-04
  • 打赏
  • 举报
回复
引用 3 楼 only_endure 的回复:
和本机没关系,和服务器的字符集有关。。。


确定吗 ?
我在plsql上边执行更新中文是OK的

在代码里边 用oledb、odp.net之类的 执行更新 都成了 “靠靠靠”

一品梅 2017-09-04
  • 打赏
  • 举报
回复
和本机没关系,和服务器的字符集有关。。。
空白桑 2017-09-04
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
修改系统的区域和语言设置试下 具体步骤: 控制面板-区域和语言-管理-非Unicode程序的语言-更改系统区域设置
改成啥 ?
xian_wwq 2017-09-04
  • 打赏
  • 举报
回复
修改系统的区域和语言设置试下 具体步骤: 控制面板-区域和语言-管理-非Unicode程序的语言-更改系统区域设置

111,092

社区成员

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

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

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