Java 字符编码问题

编码|问题

1.关于文件编码
一般文件保存(文本文件),在保存的时候按系统默认语言编码(字符集)保存, 在中文系统上是GBK,英文系统上是ISO8859_1, 日文系统上是MS932. 在打开的时候同样是按当前系统默认语言(字符集)编码去解码,所以一些中文汉字在日文系统上会显示乱码的原因就是这个. 说白了也就是打开文件时候不同平台使用的字符集不同, 例如中文字符集包括 a,b,c, 日文字符集包括a,b,当在日文系统上解码汉字c的时候,就会出现所谓的乱码。

2. java工作处理编码模式
(1)java在运行期一律以unicode来存储字符,这样有利的支持了多语言环境.
(2)java在读取文件的时候默认是按照系统默认语言(字符集)编码来解码文件,读取和保存时候的编码不一致也导致程序中参数值错误,用FileInputStream类读取文件可以指定编码读取
(3)java在输出到系统界面时(windows)会把内存中变量字符再通过系统默认语言(字符集)编码去转换,所以在输出过程中也会碰到一系列的编码问题

3.解决方案
(1)swing/awt : 输出到系统界面解码时可以通过设置组件显示字体来替换系统字符集解码
例如:
public static void setFont(Font pFont){
UIManager.put("Button.font", pFont);
UIManager.put("ToggleButton.font", pFont);
UIManager.put("RadioButton.font", pFont);
UIManager.put("CheckBox.font", pFont);
UIManager.put("ColorChooser.font", pFont);
UIManager.put("ToggleButton.font", pFont);
UIManager.put("ComboBox.font", pFont);
UIManager.put("ComboBoxItem.font", pFont);
UIManager.put("InternalFrame.titleFont", pFont);
UIManager.put("Label.font", pFont);
UIManager.put("List.font", pFont);
UIManager.put("MenuBar.font", pFont);
UIManager.put("Menu.font", pFont);
UIManager.put("MenuItem.font", pFont);
UIManager.put("RadioButtonMenuItem.font", pFont);
UIManager.put("CheckBoxMenuItem.font", pFont);
UIManager.put("PopupMenu.font", pFont);
UIManager.put("OptionPane.font", pFont);
UIManager.put("Panel.font", pFont);
UIManager.put("ProgressBar.font", pFont);
UIManager.put("ScrollPane.font", pFont);
UIManager.put("Viewport", pFont);
UIManager.put("TabbedPane.font", pFont);
UIManager.put("TableHeader.font", pFont);
UIManager.put("Table.font", pFont);
UIManager.put("TextField.font", pFont);
UIManager.put("PasswordFiled.font", pFont);
UIManager.put("TextArea.font", pFont);
UIManager.put("TextPane.font", pFont);
UIManager.put("EditorPane.font", pFont);
UIManager.put("TitledBorder.font", pFont);
UIManager.put("ToolBar.font", pFont);
UIManager.put("ToolTip.font", pFont);
UIManager.put("Tree.font", pFont);
}
通过传递一个字体名称来控制软件输出的字符集,避免产生乱码

2. JSP : 可以通过设置charset来解决
例如:<%@ page contentType="text/html;charset=gb2312" %>

3. 数据库: java在数据库流中也会产生编码问题, 可以参照文件的方法,在接收流时以特定的字符集去解码
例如: 使用方法 InputStreamReader(InputStream in, Charset cs) 可以实现

时间: 2024-08-22 14:24:20

Java 字符编码问题的相关文章

我的Java开发学习之旅------&amp;gt;Java字符编码解析

Java开发中,常常会遇到乱码的问题,一旦遇到这种问题,常常就很扯蛋,每个人都不愿意承认是自己的代码有问题.其实编码问题并没有那么神秘,那么不可捉摸,搞清Java的编码本质过程就真相大白了.               其实,编码问题存在两个方面:JVM之内和JVM之外.   1.Java文件编译后形成class 这里Java文件的编码可能有多种多样,但Java编译器会自动将这些编码按照Java文件的编码格式正确读取后产生class文件,这里的class文件编码是Unicode编码(具体说是UT

Java字符编码转换过程说明

Java字符编码转换过程说明 />/> 常见问题 JVM JVM启动后,JVM会设置一些系统属性以表明JVM的缺省区域. user.language,user.region,file.encoding等. 可以使用System.getProperties()详细查看所有的系统属性. 如在英文操作系统(如UNIX)下,可以使用如下属性定义强制指定JVM为中文环境 -Dclient.encoding.override=GBK -Dfile.encoding=GBK -Duser.language=

java字符编码转换

在开发的过程中,字符编码常常令我们头痛.经常会出现各种各样的乱码.下面就介绍java的编码转换和常见的乱码是使用什么样的编码去读取的: 先看一张图片: 在看看java中如何处理编码的转换: package com.test; /** * 字符串编码转换 * @author Herman.xiong * @date 2015年7月16日09:36:59 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015

Java字符编码解码的实现详解_java

 字符集基础: Character set(字符集)          字符的集合,也就是,带有特殊语义的符号.字母"A"是一个字符."%"也是一个字符.没有内在数字价值,与 ASC II ,Unicode,甚至是电脑也没有任何的直接联系.在电脑产生前的很长一段时间内,符号就已经存在了. Coded character set(编码字符集)          一个数值赋给一个字符的集合.把代码赋值给字符,这样它们就可以用特定的字符编码集表达数字的结果.其他的编码字符

基于Java字符编码的使用详解_java

1,什么是字符编码?     字符(Character)是文字与符号的总称,包括文字.图形符号.数学符号等.一组抽象字符的集合就是字符集(Charset).字符集的出现是为了信息进行传播储存提供方便.目前常用到字符集有:ASCII,ISO 8859-1,Unicode,GB2312 2,各种编码集有哪些特点? ASCII:     ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系

java 字符编码-国字的UNICODE编码问题

问题描述 国字的UNICODE编码问题 我在UNICODE编码查到,国字的UNICODE码是0X56FD,然而我通过以下java程序获得的结果是:四个字节:-1,-286,-3,86我理解是56的10进制编码,那么: 每个中文字不都是两个字节吗?-1,-2,分别是什么?另外最后一个字节的中文编码应该是253,-3是什么呢? String strChina=""国""; try { byte buf[] = strChina.getBytes(""

Java字符编码问题

今天研究了一下,记录下来 中间用的是redis,可以使用任意其他的io替代,一样的   Test1         String s1 = "我要测试";         String s2 = "I want to test";         String s3 = "경쟁력, 네이버";         redis.lpush("testencode", s1);         redis.lpush("te

Java中的字符编码问题处理心得总结_java

当面对一串字节流的时候,如果不指定它的编码,其实际意义是无法知道的. 这句话应该也是我们面对"字符转字节,字节转字符"问题时候时刻记在脑子里的.否则乱码问题可能就接踵而至. 其实乱码问题的本质就是Encoding和Decoding用的不是一个编码,明白了这个道理就很好解决乱码问题了. Java中常见的时候有如下: 1. String类使用byte[]的构造函数 String(byte[] bytes),String类同时提供了两个重载 (1)String(byte[] bytes, C

JAVA里字符编码的探索与理解

编码 今天终于把JAVA里一个比较头痛的问题--字符编码弄清晰了,所以写一篇文章来纪念一下,也为大家提供一点自己的心得. 众所周知,JAVA为了国际通用,用的是UNICODE来保存里面的字符.而UNICODE只是一个种字符集,字符的存储和表示要用到一定的字符编码格式,而与UNICODE对应的字符编码格式就是我们常看到的UTF-8,UTF-16等等,而UTF-8是最常用的,所以人们常常把它和UNICODE等同起来(我以前就是这样的),这在某些情况下是没有错的,但这样的理解在JAVA里就会产生一些混