4、JDBC ODBC Bridge的Bug及其解决方法
在编写一数据库管理程序时,发现JDBC-ODBC Bridge存在不易发现的Bug。在向数据表插入数据时,如果为英文字符,存储内容完全正确,如果存入中文字符,部分数据库只能存储前七八个中文字符,其他内容被截去,导致存储内容的不完整(有些数据库不存在这个问题,如Sybase SQL Anywhere 5.0。JDBC-ODBC Bridge还存在无法建表的Bug)。
对于广大需要存储中文信息的Java程序员来说,这可是一个不好的消息。要么改用其他语言编程,要么选择其他价格昂贵的数据库产品。“一次编写,到处运行”的目标,也大打折扣。能不能采用变通的方法,将中文信息进行处理后再存储来解决这个问题呢?答案是肯定的。
解决问题的具体思路、方法
Java采用Unicode码编码方式,中英文字符均采用16bit存储。既然存储英文信息是正确的,根据一定规则,将中文信息转换成英文信息后存储,自然不会出现截尾现象。读取信息时再进行逆向操作,将英文信息还原成中文信息即可。由GB2312编码规则可知,汉字一般为二个高位为1的ASCII码,在转换时将一个汉字的二个高位1去掉,还原时再将二个高位1加上。为了处理含有英文字符的中文字串,对英文字符则需要加上一个Byte 0标记。以下提供的两个公用静态方法,可加入任何一个类中使用。
以下是引用片段: 将中英文字串转换成纯英文字串 public static String toTureAsciiStr(String str){ StringBuffer sb = new StringBuffer(); byte[] bt = str.getBytes(); for(int i =0 ;i〈bt.length;i++){ if(bt[i]〈0){ //是汉字去高位1 sb.append((char)(bt[i]&&0x7f)); }else{//是英文字符 补0作记录 sb.append((char)0); sb.append((char)bt[i]); } } return sb.toString(); } 将经转换的字串还原 public static String unToTrueAsciiStr(String str){ byte[] bt = str.getBytes(); int i,l=0,length = bt.length,j=0; for(i = 0;i〈length;i++){ if(bt[i] == 0){ l++; } } byte []bt2 = new byte[length-l]; for(i =0 ;i〈length;i++){ if(bt[i] == 0){ i++; bt2[j] = bt[i]; }else{ bt2[j] = (byte)(bt[i]|0x80); } j++; } String tt = new String(bt2); return tt; } |
上例在实际编程中效果很好,只是存储的中文信息需要经过同样处理,才能被其他系统使用。而且如果中文字串出现英文字符,实际上增加了额外的存储空间。
分享到:
相关推荐
乱码的处理!程序员永远无法避免的话题,解决乱码总汇
Java避免UTF-8的csv文件打开中文出现乱码的方法 在Java中,避免UTF-8的csv文件打开中文出现乱码的方法是非常重要的。csv文件是 comma separated values 的缩写,常用于数据交换和导入导出操作。然而,在Java中读取...
乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理文件乱码处理...
最后,报告中提到的“001▇本次薪酬调研岗位列表一X”可能是报告中岗位列表的一个部分,但由于扫描文本中出现了乱码,这部分内容的具体含义无法准确理解。但可以确定的是,岗位列表应该是详细的各行业或各部门岗位...
8. **注意事项**:确保在整个Web应用程序中保持编码的一致性,包括数据库连接、文件读写、响应输出等环节,都应使用相同的字符编码,以避免出现乱码问题。 总之,解决URL乱码问题需要理解URL编码机制,正确设置页面...
这一步骤的目的是避免服务器强制使用UTF-8编码,而是采用与客户端相匹配的编码格式进行通信,减少乱码的产生。 ### 四、总结 通过上述步骤,可以有效解决Serv-U9.x版本FTP服务器在处理中文文件名时出现的乱码和...
【乱码处理】在中国,程序员经常需要面对的一个挑战就是乱码问题,这主要源于中英文字符编码的不同。编码机制是导致乱码的核心原因,中文字符通常使用GBK或GB2312等编码,而英文字符则普遍采用ASCII或Unicode。如果...
oracle乱码解决功能 Oracle乱码解决功能是指在使用Oracle数据库时,汉字显示异常的解决方法。这种问题的产生是由于字符集的设置不当所致。字符集是Oracle为适应不同语言文字显示而设定的,用于汉字显示的字符集...
2) 客户端接收到的响应内容显示为乱码。这主要是由于字符编码不一致导致的。HTTP协议默认使用ASCII编码,而中文字符通常需要UTF-8或GBK等编码来正确表示。 二、Java Filter简介 Java Filter是Servlet规范的一部分,...
2. **乱码产生的原因** - **编码不一致**:客户端与服务器之间的编码格式不一致,例如客户端发送的数据是UTF-8编码,而服务器端假设是GBK编码,就会导致乱码。 - **缺少字符编码声明**:HTTP请求头或者文件头没有...
在IT行业中,乱码问题是一个常见的困扰,尤其是在处理多语言环境或者进行数据传输时。"乱码处理操作类"指的是为了正确显示或处理文本而设计的特定代码类,通常用于解决Java SSH(Spring、Struts、Hibernate)框架下...
在C#编程中,处理汉字乱码问题是一个常见的需求,尤其是在读取或写入文本文件时。当在C#控制台应用中遇到汉字输出乱码的情况,这通常是因为编码不匹配所导致的。编码是字符集与二进制数据之间的转换规则,不同的系统...
Java 中文乱码问题是一个常见的编程困扰,尤其对于处理中文字符的Java程序而言。这个问题通常源于字符编码...通过细心配置和适当地指定编码,我们可以有效地避免乱码问题,确保程序在各种环境中都能正确处理中文字符。
乱码通常指的是字符显示不正确或无法识别,这可能由于编码格式不匹配、文件损坏、程序设置不当等原因引起。下面将详细讨论乱码产生的原因、解决方案以及如何预防。 一、乱码产生的原因 1. **编码格式不一致**:...
2. **避免循环引用**:检查代码中是否存在循环引用,这可能导致垃圾回收器无法释放内存。使用`WeakRef`对象或及时清理不再需要的对象。 3. **设置最大内存限制**:通过`--max-old-space-size`命令行选项,你可以...
### 中文乱码处理问题总结 #### 一、引言 在进行中文字符处理时,经常会出现乱码问题。这主要是因为不同的系统、程序或组件可能采用不同的编码方式,而这些编码方式之间的转换不当就会导致乱码现象。本文将重点...
### Struts2乱码处理详解 #### 背景与挑战 在Web开发中,特别是使用Struts2框架时,中文乱码问题常常困扰开发者。无论是前端还是后端,只要涉及中文字符的传递与处理,都有可能出现乱码现象。本文将针对Struts2中的...
在默认情况下,`maven-javadoc-plugin`插件在生成Javadoc文档时采用的是ISO-8859-1编码格式,这种编码方式无法正确解析中文字符,从而导致中文乱码现象。 ##### 2.2 解决方案 - **POM文件配置** 在`pom.xml`文件...
3. **软件编码识别错误**:部分软件可能无法准确识别文件的编码格式,尤其是在处理非标准编码或混合编码的文件时。 **解决方法**: 1. **手动指定编码**:在编程时,可以显式指定文件的编码格式,例如在Java中使用...
这文件,我也不知为毛,下载后“文件名字”会出现一些乱码,请将乱码删除后,便可打开,不关我的事,是网站系统造成的! 好吧,这个中文手册,原来网上就有,但是哥下载后,发现字体尽其过份地小,看着很累,很不爽...