编码问题我仍旧没搞懂,最根本的从哪里来就没搞懂。当页面发送请求,编码到后台是什么编码呢?好吧,我默认的都是utf-8.后台接收参数后,可以在控制台打印出来,我也不清楚是什么编码。然后,就是数据库问题。

在mysql数据库,首先会设置mysql安装的字符集为utf-8,然后在连接的jdbc上注明characterEncoding是utf-8.一直这样统一下去,没有出现乱码。

连接oracle就出现问题了,我使用的一个已经安装好的oracle数据库。字符集是American,us7ascii.我插入和查询的中文都是乱码。百度了很久之后,还是进行转码工作。

关于java编码,先看String中的几个方法:

getBytes()

1 byte[] java.lang.String.getBytes(String charsetName) throwsUnsupportedEncodingException2

3

4 Encodes this String into a sequence of bytes using the named charset, storing the result into a new bytearray.5

6 The behavior of this method when this string cannot be encoded in the given charset is unspecified. The java.nio.charset.CharsetEncoder class should be used when more control over the encoding process is required.

这里先要搞清楚编码(encode)和解码(decode).下面是个人推测,没有考证的解释:

encode:编码,将字符依据某种规则(字符集)解释为一串数字

decode:解码,将一串数字依据某种规则翻译为字符

理解了编码和解码后,从一个字符串开始解析。

字符串str="中文",str是一串字符,通过str.getBytes()可以编码成byte数组。通过new String(bytes)来解码为字符串。下面是测试:

1 @Test2 public void getEncod() throwsUnsupportedEncodingException {3 String sysencod = System.getProperty("file.encoding");4 System.out.println("系统默认编码:"+sysencod);5 String str = "中文";6 System.out.println("字符实例:"+str);7 System.out.println("===============getbytes无参:===============");8 byte[] bytes =str.getBytes();9 for (int i = 0; i < bytes.length; i++) {10 System.out.print(bytes[i]);11 }12 System.out.println();13 System.out.println("通过默认字符集,将字符数组解码为字符:"+newString(bytes));14 System.out.println("通过utf-8字符集,将字符数组解码为字符:"+new String(bytes,"utf-8"));15 System.out.println("通过gbk字符集,将字符数组解码为字符:"+new String(bytes,"gbk"));16 System.out.println("通过iso-8859-1字符集,将字符数组解码为字符:"+new String(bytes,"iso-8859-1"));17

18

19 System.out.println("===============getbytes(utf-8):===============");20 byte[] bytes2 = str.getBytes("utf-8");21 for (int i = 0; i < bytes.length; i++) {22 System.out.print(bytes[i]);23 }24 System.out.println();25 System.out.println("通过默认字符集,将字符数组解码为字符:"+newString(bytes2));26 System.out.println("通过utf-8字符集,将字符数组解码为字符:"+new String(bytes2,"utf-8"));27 System.out.println("通过gbk字符集,将字符数组解码为字符:"+new String(bytes2,"gbk"));28 System.out.println("通过iso-8859-1字符集,将字符数组解码为字符:"+new String(bytes2,"iso-8859-1"));29 System.out.println("===============getbytes(gbk):===============");30 byte[] bytes3 = str.getBytes("gbk");31 for (int i = 0; i < bytes.length; i++) {32 System.out.print(bytes[i]);33 }34 System.out.println();35 System.out.println("通过默认字符集,将字符数组解码为字符:"+newString(bytes3));36 System.out.println("通过utf-8字符集,将字符数组解码为字符:"+new String(bytes3,"utf-8"));37 System.out.println("通过gbk字符集,将字符数组解码为字符:"+new String(bytes3,"gbk"));38 System.out.println("通过iso-8859-1字符集,将字符数组解码为字符:"+new String(bytes3,"iso-8859-1"));39 System.out.println("===============getbytes(iso-8859-1):===============");40 byte[] bytes4 = str.getBytes("iso-8859-1");41 for (int i = 0; i < bytes.length; i++) {42 System.out.print(bytes[i]);43 }44 System.out.println();45 System.out.println("通过默认字符集,将字符数组解码为字符:"+newString(bytes4));46 System.out.println("通过utf-8字符集,将字符数组解码为字符:"+new String(bytes4,"utf-8"));47 System.out.println("通过gbk字符集,将字符数组解码为字符:"+new String(bytes4,"gbk"));48 System.out.println("通过iso-8859-1字符集,将字符数组解码为字符:"+new String(bytes4,"iso-8859-1"));49 }

View Code

结果:

奇诡的是,虽然getBytes打印的byte数组内容看起来是一样的,但此编码结构却是不同的。并不是一串字符通过某种字符集编码,再解码就可以还原的。这要看该字符是属于何种编码。中文字符只有utf-8和gbk能够存储成功,别的编码会出现漏码像7位编码之类的。而我要解决的就是中文乱码问题。因此,中文编码是关于utf-8和gbk的。

对于存储于oracle的中文字符,采用iso-8859-1.因此,需要考虑的就是utf-8还是gbk转储为iso-8859-1.

经过测试,存储的时候:p=new String(p.getBytes("gbk"),"iso-8859-1");而getBytes("utf-8")失败。

查询结果的时候:result = new String(str.getBytes("ISO-8859-1"),"gbk")可以将oracle的中文正常显示。

附上我用oracle的字符集:

java oracle中文乱码_java字符编码和oracle乱码相关推荐

  1. PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的。 检查Oracle服务器端字符编码,用 sel

    PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的. 检查Oracle服务器端字符编码,用 select ...

  2. 代码和mysql服务器编码不一致_PL/SQL Developer教程:解决oracle服务器端和客户端字符编码不一致问题...

    PL/SQL Developer是一个集成开发环境,它专门针对Oracle数据库的存储程序单元的开发所用.现在越来越多的商业逻辑和应用程式逻辑都在使用Oracle服务器,所以PL/SQL编程在整个开发 ...

  3. 中文字符集与字符编码知识

    中文字符集与字符编码的基础知识 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII ...

  4. 中文字符集与字符编码的基础知识[转载]

    中文字符集与字符编码的基础知识 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII ...

  5. java/jsp/sql server项目 字符编码统一_JSP开发过程遇到的中文乱码问题及解决方案...

    对于程序猿来说,乱码问题真的很头疼,下面列举几种常见的乱码. 1.数据库编码不一致导致乱码 解决方法:首先查看数据库编码,输入: show variables like "%char%&qu ...

  6. JAVA字码的转换_java字符编码转换研究(转)

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  7. java字符编码详解_java字符编码详解

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  8. java字符编码采用_JAVA字符编码三:Java应用中的编码问题

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  9. java字符编码问题_JAVA字符编码系列三:Java应用中的编码问题

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

最新文章

  1. 邬贺铨:区块链技术将确保物联网隐私和安全
  2. 【codevs1087NOIP2003】麦森数,高精度+对数+快速幂
  3. 又错过了暴富的机会!亚马逊AWS突发Bug,比特币现史诗级捡漏机会?
  4. 自写小函数处理 javascript 0.3*0.2 浮点类型相乘问题
  5. python基础教程视频-python从入门到精通之30天快速学python视频教程
  6. requests01_嵩山
  7. python全局变量被覆盖的问题
  8. jquery动画效果总结
  9. Win7 安装程序时报错 error 1935 HRESULT 0x80070422
  10. [算法]机器人运动范围
  11. 条码打印机如何打印流水号
  12. 计算机外文文献PDF,computer network 计算机 网络 外文文献.pdf
  13. 【优化模型】求非齐次线性方程组的通解
  14. Java+MySQL基于ssm的大学生心理健康教育管理系统
  15. 国产麒麟系统PXE安装-UEFI引导
  16. 软碟通系统U盘制作教程
  17. 统计学之大数定律、小数法则
  18. E.03.10 Coffee Drinking Tied to Lower Risk of Heart Failure
  19. 电子元器件贸易企业如何借助ERP系统,解决仓库管理难题?
  20. Redis的下载安装运行

热门文章

  1. 怎样设置Win7共享
  2. SSL证书安装配置指南(SM2证书)
  3. 关于Python自动化操作Excel的36个Python函数【面试必学】
  4. 三层网络防护的域渗透
  5. wdr7661散热问题_深入测评普联TL-WDR7661千兆版怎么样??比较好不好呀?
  6. R产生指定协方差阵的正态随机向量
  7. 复盘案例:橱柜安装不合适,导致柜体、台面均重做
  8. 计算机毕业设计之SpringBoot+Vue.js工会管理系统 工会管理平台
  9. 序列求和:问题描述 求1+2+3+...+n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行,包括一个整数,表示1+2+3+...+n的值。
  10. 华为运营商级路由器配置示例 | EVdPdNd VPLS over SR-MPLS BE(BD EVdPdNd)