我们的系统连的是Oracle10g的库,现在做第三方接口,要连Oracle 9i,但那边的库跟我们的库不是同一种字符集,就造成了乱码问题,据说装9i客户端,通过9i的客户端连9i数据库就可以显示中文,在Dephi里面是这样做的,用的Provider=OraOLEDB.Oracle.1,显示中文没问题,但在C#里面这种方式却还是乱码,估计是跟编程语言有关,C#是托管的,运行在.net framework上。

为了这问题头都大了,在网上找遍了方法,有改环境变量的,有改注册表的,结果还是不行,今天打听到一个可行的办法,如果不考虑性能问题的话,即在Oracle里面用select rawtohex(UTL_RAW.cast_to_raw(trim(字段名))) from 表 把中文转换成16进制,再在C#里面把16进制转换成中文就搞定了。C#的转换函数如下:

View Code

 1           /// <summary>
 2         /// 从汉字转换到16进制
 3         /// </summary>
 4         /// <param name="s"></param>
 5         /// <returns></returns>
 6         public static string GetHexFromChs(string s)
 7         {
 8             if ((s.Length % 2) != 0)
 9             {
10                 s += " ";//空格
11                 //throw new ArgumentException("s is not valid chinese string!");
12             }
13
14             System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");
15
16             byte[] bytes = chs.GetBytes(s);
17
18             string str = "";
19
20             for (int i = 0; i < bytes.Length; i++)
21             {
22                 str += string.Format("{0:X}", bytes[i]);
23             }
24
25             return str;
26         }
27         /// <summary>
28         /// 从16进制转换成汉字
29         /// </summary>
30         /// <param name="hex"></param>
31         /// <returns></returns>
32         public static string GetChsFromHex(string hex)
33         {
34             if (hex == null)
35                 throw new ArgumentNullException("hex");
36             if (hex.Length % 2 != 0)
37             {
38                 hex += "20";//空格
39                 //throw new ArgumentException("hex is not a valid number!", "hex");
40             }
41             // 需要将 hex 转换成 byte 数组。
42             byte[] bytes = new byte[hex.Length / 2];
43
44             for (int i = 0; i < bytes.Length; i++)
45             {
46                 try
47                 {
48                     // 每两个字符是一个 byte。
49                     bytes[i] = byte.Parse(hex.Substring(i * 2, 2),
50                         System.Globalization.NumberStyles.HexNumber);
51                 }
52                 catch
53                 {
54                     // Rethrow an exception with custom message.
55                     throw new ArgumentException("hex is not a valid hex number!", "hex");
56                 }
57             }
58
59             // 获得 GB2312,Chinese Simplified。
60             System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");
61
62
63             return chs.GetString(bytes);
64         }

转载于:https://www.cnblogs.com/xtjatswc/archive/2012/10/31/2747661.html

连接Oracle9i,因字符集造成乱码的解决方法相关推荐

  1. mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法

    MySQL对中文的支持程度还是很有限的,尤其是新手,但凡出现乱码问题,就会头大. 乱码问题1:用PHPmyAdmin操作MySQL数据库汉字显示正常,但用PHP网页显示MySQL数据时所有汉字都变成了 ...

  2. ci框架 乱码 mysql_mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法

    mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法 作者:吕海鹏 文章来源:itstudy原创 发表时间:2008-10-18 11:15:08 阅读次数:今日:5 本 ...

  3. 机顶盒ttl无法输入_连接TTL线后无法输入代码、不跑码乱码的解决方法

    原标题:连接TTL线后无法输入代码.不跑码乱码的解决方法 连接TTL线后无法输入代码.不跑码乱码的解决方法,在群里一直会碰到一些网友询问为什么我接好了TTL线后却没有跑码或者是跑出的代码时乱码,是哪里 ...

  4. 机顶盒ttl无法输入_中兴盒子连接TTL线后无法输入代码、不跑码乱码的解决方法分享...

    连接TTL线后无法输入代码.不跑码乱码的解决方法,在群里一直会碰到一些网友询问为什么我接好了TTL线后却没有跑码或者是跑出的代码时乱码,是哪里出错了?所以今天特地开一个帖子详解一下造成这种情况的原因, ...

  5. jsp mysql中文乱码,jsp中文乱码 jsp mysql 乱码的解决方法

    jsp中文乱码 jsp mysql 乱码的解决方法 jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCh ...

  6. Putty中文乱码的解决方法

    Putty在默认情况下没有使用UTF-8编码,因此在显示中文的时候会出现乱码. 解决方法非常简单: 按照下图,在连接之前,左边窗口中的"转换"选项卡(如图所示),然后在右边&quo ...

  7. navicat for mysql 1045错误,navicat连接mysql时出现1045错误的解决方法

    navicat连接mysql时出现1045错误的解决方法 navicat for MySQL 连接本地数据库出现1045错误 如下图: 查了很多资料,意思是说mysql没有授权远程连接,也就是权限不够 ...

  8. SecureCrt 乱码的解决方法

    [原文地址] SecureCrt 乱码的解决方法 在windows下面远程连接linux主机,以前常用的是xshell,好长时间没用xshell,感觉xshell不像以前好用,记得以前不要注册码的,现 ...

  9. python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法

    本文实例展示了一个脚本python用来转化表配置数据xml并生成相应的解析代码. 但是在中文编码上出现了乱码,现将解决方法分享出来供大家参考. 具体方法如下: 1. Python文件设置编码 utf- ...

最新文章

  1. NA-NP-IE系列实验之前三个实验小结
  2. 第七章 右左法则----复杂指针解析
  3. RHEL 6 关闭ThinkPad 触摸板
  4. php和dart的区别,Dart相等和关系运算符
  5. JavaScript学习总结(三)——逻辑And运算符详解
  6. 谓词NSPredicate的使用
  7. callablestatement.setstring会不会将字符串trim_Java String:重要到别人只能当老二的字符串类
  8. centos网络隔一段时间就断_计算机网络总结
  9. iOS中 陀螺仪/加速器 韩俊强的博客
  10. GitHub使用入门讲解--官方文档翻译让你最真实了解
  11. 移动应用后端应该使用 AWS 还是 Firebase?
  12. RSTP原理和新增特性
  13. HTTP405: 错误方法 - 不支持使用的 HTTP 谓词。
  14. pyserial模块读取串口数据
  15. 自制力才是你努力的第一步
  16. vue组件 组件的继承extend
  17. Microsoft Dynamics 365 (on-premises) Update 2.12
  18. 初入Linux,M35作业第二弹,牛刀小试
  19. 图谱实战 | 为什么我们需要医学知识图谱?
  20. 短线黑马选股绝技 一

热门文章

  1. MongoDB中常用的几种数据类型
  2. mysql5.5备份数据库_mysql5.5数据库备份
  3. 《数字摄影与摄像》学习笔记——摄影课理论基础
  4. 【CSP】第20届CCF CSP计算机软件能力认证划水贴
  5. 【Web前端】搭建网站相关术语
  6. C++奥赛一本通排序题解
  7. UVa10082 - WERTYU
  8. php中upload函数,PHP中文件的上传和下载常用函数
  9. python语言源程序文件类型_Python语言源程序文件的文件类型是__________。
  10. python博客主题_博客园SimpleMemary主题美化教程