`
geelong
  • 浏览: 117172 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 中编码字符 转载

阅读更多

/*在字节流与字符流之间起桥梁作用的InputStreamReader与 OutputStreamWriter类,
InputStreamReader使用指定的字符集(charSet)读取字节,解码为字符,OutPutStream使用指定的字符集将字符编码为字 节,
写入到输出流中
Charset类(java.nio.charset.Charset):要获取JVM当前可以使用的字符集,可以使用该类中的
static sortedMap availableCharset();下面利用该类中的availableCharsets()看一下在JVM中国有哪些字符集可以使用的

package IO;
import java.util.Map;
import java.nio.charset.*;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class CharsetTest{
public static void main(String[]args){
   Map map=Charset.availableCharsets();
   Set set=map.keySet();
   Iterator it=set.iterator();

   while(it.hasNext()){
    System.out.println(it.next());
   }
   }
}*/
/*返回值是
Big5
Big5-HKSCS
EUC-JP
EUC-KR
GB18030
GB2312
GBK
IBM-Thai
IBM00858
IBM01140
IBM01141
IBM01142
IBM01143
IBM01144
IBM01145
IBM01146
IBM01147
IBM01148
IBM01149
IBM037
IBM1026
IBM1047
IBM273
IBM277
IBM278
IBM280
IBM284
IBM285
IBM297
IBM420
IBM424
IBM437
IBM500
IBM775
IBM850
IBM852
IBM855
IBM857
IBM860
IBM861
IBM862
IBM863
IBM864
IBM865
IBM866
IBM868
IBM869
IBM870
IBM871
IBM918
ISO-2022-CN
ISO-2022-JP
ISO-2022-JP-2
ISO-2022-KR
ISO-8859-1
ISO-8859-13
ISO-8859-15
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
JIS_X0201
JIS_X0212-1990
KOI8-R
KOI8-U
Shift_JIS
TIS-620
US-ASCII
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
UTF-8
windows-1250
windows-1251
windows-1252
windows-1253
windows-1254
windows-1255
windows-1256
windows-1257
windows-1258
windows-31j
x-Big5-Solaris
x-euc-jp-linux
x-EUC-TW
x-eucJP-Open
x-IBM1006
x-IBM1025
x-IBM1046
x-IBM1097
x-IBM1098
x-IBM1112
x-IBM1122
x-IBM1123
x-IBM1124
x-IBM1381
x-IBM1383
x-IBM33722
x-IBM737
x-IBM834
x-IBM856
x-IBM874
x-IBM875
x-IBM921
x-IBM922
x-IBM930
x-IBM933
x-IBM935
x-IBM937
x-IBM939
x-IBM942
x-IBM942C
x-IBM943
x-IBM943C
x-IBM948
x-IBM949
x-IBM949C
x-IBM950
x-IBM964
x-IBM970
x-ISCII91
x-ISO-2022-CN-CNS
x-ISO-2022-CN-GB
x-iso-8859-11
x-JIS0208
x-JISAutoDetect
x-Johab
x-MacArabic
x-MacCentralEurope
x-MacCroatian
x-MacCyrillic
x-MacDingbat
x-MacGreek
x-MacHebrew
x-MacIceland
x-MacRoman
x-MacRomania
x-MacSymbol
x-MacThai
x-MacTurkish
x-MacUkraine
x-MS932_0213
x-MS950-HKSCS
x-mswin-936
x-PCK
x-SJIS_0213
x-UTF-16LE-BOM
X-UTF-32BE-BOM
X-UTF-32LE-BOM
x-windows-50220
x-windows-50221
x-windows-874
x-windows-949
x-windows-950
x-windows-iso2022jp
*/
/* 下面再看一下当前JVM使用的默认字符编码集
System类里面有一个static Properties getProperties()返回当前系统属性,Properties 里面有一个
void list(PrintStream out) 将属性列表输出到指定的输出流。
package IO;
public class CharsetTest{
public static void main(String[]args){
   System.getProperties().list(System.out);
   }
   }*/

/*在java中当我们把一个字节转换为一个字符的时候这个字符使用Unicode表示的这个过程叫做解码,
当我们把一个Uniocode码转换为本地字符集所表示的代码,这个过程叫编码(outputStreamReader),

Java中字节与字符都是使用Unicode来表示的 ,构造一个字符串就是解码过程,将字符或者字符串转换成字节
就是编码过程
   利用一个现成的函数从数据库中读取一条记录(汉字的),打印出来是乱码,有可能是这个函数再将字节解码
   成字符串的时候,采用的是其他字符集例如ISO-8859-1,而当我们利用System.out 对象打印字符串出来的时候
   System.out对像在中文系统平台上采用GBK字符集创建的,打印的时候会将字符串编码程字节数组的时候就会使乱码了
   碰到这种情况,可以讲得到的字符串在按照ISO-8859-1编码为字节数组 ,这样就可以得到了中文字符原先的GBK
   码 ,然后在用GBK字符集解码为字符串,再次打印就不会是乱码了*/
   package IO;
   import java.util.Properties;
   public class CharsetTest{
    public static void main(String[]args)throws Exception{
     Properties p=System.getProperties();
     p.put("file.encoding","ISO-8859-1");
     int data;
     byte[]b=new byte[1024];
      int i=0;
     while((data=System.in.read())!='q')
     {b[i]=(byte)data;
     i++;
     }//如果输入的是中文的话,由于在计算机中没有中文的都是它相对应的二进制数,在Windows中
     //所输入的中文读进去的是中文字符所对应的GBK码制,存储到字节数组中,一个中文站2个字节
         String s= new String(b,0,i);//因为已经将缺省的字符编码集改为ISo-8859—1,所以解码的时候
      //回用IOS-8859-1解码为unicode字符串,刚才读入的中文是系统平台下对应的字符集,中文的操作系统对应的字符集就是GBK码,
      //所以当读入的时候在字节数组中存储的是中文书组对应得GBK码,
          //当用new String去构造字符串的时候,使用JVM缺省的编码方式,现在已将JVM的默认编码方式改为ISO-8859-1,
     System.out.println(s);//于是解码用相对应的IOS-8859-1UNIcode码,然后去构造这个字符串
     //打印的时候会按照GBK码制去解码,所以打印的死乱码
     System.out.println(new String(s.getBytes("ISO-8859-1"),"GBK"));//利用s.getBytes("ISO-8859-1")去
     // 按照ISO-8859-1编码为"ISO-8859-1")字节数组,然后在按照“GBK”解码为String,
    
    }
}

分享到:
评论

相关推荐

    深入分析 Java I/O 的工作机制(转载)

    Java I/O系统广泛涉及字符编码,如ASCII、UTF-8、GBK等。Charset类提供了字符集的相关操作,InputStreamReader和OutputStreamWriter在创建时需要指定字符集。 总的来说,Java I/O机制是一个复杂但强大的体系,涵盖...

    java编程语言代码规范(中文)

    的《Java语言规范》中描述的Java语言编码标准编写。主要贡献者包括Peter King、Patrick Naughton、Mike DeMoney、Jonni Kanerva、Kathy Walrath和Scott Hommel。如需转载或修改文档,请遵循相关版权公告,并可通过...

    Java字节码(.class文件)格式详解((转载)

    `.docx`文档可能详细解析了Java字节码中的各个指令,包括它们的编码、含义、操作数和实际应用。通过阅读这份文档,你可以深入理解JVM如何执行字节码,以及如何通过反编译工具如jad、 jclasslib来分析`.class`文件。 ...

    webfilter的教程

    综上所述,`Filter`在Java Web开发中扮演着关键角色,无论是处理字符编码,还是实施安全策略。通过熟练掌握`Filter`,开发者可以提高应用的安全性和用户体验。学习并实践上述提到的资源,将有助于深化对`Filter`的...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    暑假做网站项目的实践报告范文.doc

    8. **编码规范与兼容性**:不遵循标准编码规范可能会导致问题,如全角字符乱码,强调了编程规范和跨平台兼容性的重视。 9. **团队合作与沟通**:项目中团队成员间的沟通至关重要,可以及时发现并解决问题,提高工作...

    暑假做网站项目实践报告.doc

    在编写代码和测试过程中,作者遇到了诸如字符编码问题等挑战,通过团队协作和自我学习得以解决。在项目实施过程中,作者深刻体验到了公司环境中的压力和沟通的重要性,认识到服从领导的决策和与同事有效沟通是团队...

    最新存款利息计算器源码程序.pdf

    2. **JSP语法**:`<%@ page language="java" pageEncoding="GBK"%>`是JSP页面指令,它指定了页面使用的编程语言为Java,以及页面编码为GBK,这在处理中文字符时非常重要,以避免乱码问题。 3. **CSS引用**:`;pvf...

    APKTool批处理版l

    4.保存时的文本编码要设置为ANSI格式,具体操作在菜单栏的“格式”中。打包前确定classes 文件夹下没有其他无用文件,如notepad++的备份文件(为避免这种情况,请确认在菜单栏“设置”—“首选项”—“备份与自动...

    cobaltstrike_release-20210907.7z

    + 添加对用户定义反射加载...版权声明:本文为CSDN博主「a19770310」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/a19770310/article/details/120541758

Global site tag (gtag.js) - Google Analytics