连接Oracle9i,因字符集造成乱码的解决方法
我们的系统连的是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#的转换函数如下:
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,因字符集造成乱码的解决方法相关推荐
- mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法
MySQL对中文的支持程度还是很有限的,尤其是新手,但凡出现乱码问题,就会头大. 乱码问题1:用PHPmyAdmin操作MySQL数据库汉字显示正常,但用PHP网页显示MySQL数据时所有汉字都变成了 ...
- ci框架 乱码 mysql_mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法
mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法 作者:吕海鹏 文章来源:itstudy原创 发表时间:2008-10-18 11:15:08 阅读次数:今日:5 本 ...
- 机顶盒ttl无法输入_连接TTL线后无法输入代码、不跑码乱码的解决方法
原标题:连接TTL线后无法输入代码.不跑码乱码的解决方法 连接TTL线后无法输入代码.不跑码乱码的解决方法,在群里一直会碰到一些网友询问为什么我接好了TTL线后却没有跑码或者是跑出的代码时乱码,是哪里 ...
- 机顶盒ttl无法输入_中兴盒子连接TTL线后无法输入代码、不跑码乱码的解决方法分享...
连接TTL线后无法输入代码.不跑码乱码的解决方法,在群里一直会碰到一些网友询问为什么我接好了TTL线后却没有跑码或者是跑出的代码时乱码,是哪里出错了?所以今天特地开一个帖子详解一下造成这种情况的原因, ...
- jsp mysql中文乱码,jsp中文乱码 jsp mysql 乱码的解决方法
jsp中文乱码 jsp mysql 乱码的解决方法 jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCh ...
- Putty中文乱码的解决方法
Putty在默认情况下没有使用UTF-8编码,因此在显示中文的时候会出现乱码. 解决方法非常简单: 按照下图,在连接之前,左边窗口中的"转换"选项卡(如图所示),然后在右边&quo ...
- navicat for mysql 1045错误,navicat连接mysql时出现1045错误的解决方法
navicat连接mysql时出现1045错误的解决方法 navicat for MySQL 连接本地数据库出现1045错误 如下图: 查了很多资料,意思是说mysql没有授权远程连接,也就是权限不够 ...
- SecureCrt 乱码的解决方法
[原文地址] SecureCrt 乱码的解决方法 在windows下面远程连接linux主机,以前常用的是xshell,好长时间没用xshell,感觉xshell不像以前好用,记得以前不要注册码的,现 ...
- python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法
本文实例展示了一个脚本python用来转化表配置数据xml并生成相应的解析代码. 但是在中文编码上出现了乱码,现将解决方法分享出来供大家参考. 具体方法如下: 1. Python文件设置编码 utf- ...
最新文章
- NA-NP-IE系列实验之前三个实验小结
- 第七章 右左法则----复杂指针解析
- RHEL 6 关闭ThinkPad 触摸板
- php和dart的区别,Dart相等和关系运算符
- JavaScript学习总结(三)——逻辑And运算符详解
- 谓词NSPredicate的使用
- callablestatement.setstring会不会将字符串trim_Java String:重要到别人只能当老二的字符串类
- centos网络隔一段时间就断_计算机网络总结
- iOS中 陀螺仪/加速器 韩俊强的博客
- GitHub使用入门讲解--官方文档翻译让你最真实了解
- 移动应用后端应该使用 AWS 还是 Firebase?
- RSTP原理和新增特性
- HTTP405: 错误方法 - 不支持使用的 HTTP 谓词。
- pyserial模块读取串口数据
- 自制力才是你努力的第一步
- vue组件 组件的继承extend
- Microsoft Dynamics 365 (on-premises) Update 2.12
- 初入Linux,M35作业第二弹,牛刀小试
- 图谱实战 | 为什么我们需要医学知识图谱?
- 短线黑马选股绝技 一
热门文章
- MongoDB中常用的几种数据类型
- mysql5.5备份数据库_mysql5.5数据库备份
- 《数字摄影与摄像》学习笔记——摄影课理论基础
- 【CSP】第20届CCF CSP计算机软件能力认证划水贴
- 【Web前端】搭建网站相关术语
- C++奥赛一本通排序题解
- UVa10082 - WERTYU
- php中upload函数,PHP中文件的上传和下载常用函数
- python语言源程序文件类型_Python语言源程序文件的文件类型是__________。
- python博客主题_博客园SimpleMemary主题美化教程