返回顶部
首页 > 资讯 > 精选 >如何解决Java中文问题
  • 120
分享到

如何解决Java中文问题

2023-06-03 05:06:46 120人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“如何解决Java中文问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Java中文问题”这篇文章吧。我来说一下Tomcat如何实现jsP的你就明白了。预备知识:

这篇文章主要为大家展示了“如何解决Java中文问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Java中文问题”这篇文章吧。

我来说一下Tomcat如何实现jsP的你就明白了。

预备知识:

 1.字节和unicode

  Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式

  是使用字节流的。 因此Java要对这些字节流经行转化。char是unicode的,而byte是字节.

  Java中byte/char互转的函数在sun.io的包中间有。其中ByteToCharConverter类是中调度,

  可以用来告诉你,你用的Convertor。其中两个很常用的静态函数是

   public static ByteToCharConverter getDefault() ;

   public static ByteToCharConverter getConverter(String encoding);

  如果你不指定converter,则系统会自动使用当前的Encoding,GB平台上用GBK,EN平台上用

  8859_1

  我们来就一个简单的例子:

     "你"的gb码是:0xC4E3 ,unicode是0x4F60

     你用:

     --encoding="gb2312";

     --byte b[]={(byte)u00c4,(byte)u00E3};

     --convertor=ByteToCharConverter.getConverter(encoding);

     --char [] c=converter.convertAll(b);

     --for(int i=0;i<c.length;c++)

     --{

     -- System.out.println(Integer.toHexString(c[i]));

     --}

     --打印出来是0x4F60

     --但是如果使用8859_1的编码,打印出来是

     --0x00C4,0x00E3

     ----例1

     反过来:

     --encoding="gb2312";

        char c[]={u4F60};

        convertor=ByteToCharConverter.getConverter(encoding);

     --byte [] b=converter.convertAll(c);

     --for(int i=0;i<b.length;c++)

     --{

     -- System.out.println(Integer.toHexString(b[i]));

     --}

      --打印出来是:0xC4,0xE3

      ----例2

      --如果用8859_1就是0x3F,?号,表示无法转化      --

      很多中文问题就是从这两个最简单的类派生出来的。而却有很多类  

  不直接支持把Encoding输入,这给我们带来诸多不便。很多程序难得用encoding

  了,直接用default的encoding,这就给我们移植带来了很多困难

  --

  2.UTF-8

  --UTF-8是和Unicode一一对应的,其实现很简单

  --

   -- 7位的Unicode: 0 _ _ _ _ _ _ _

  --11位的Unicode: 1 1 0 _ _ _ _ _ 1 0 _ _ _ _ _ _

  --16位的Unicode: 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _

  --21位的Unicode: 1 1 1 1 0 _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _

  --大多数情况是只使用到16位以下的Unicode:

  --"你"的gb码是:0xC4E3 ,unicode是0x4F60

  --我们还是用上面的例子

  --  --例1:0xC4E3的二进制:

  --  --    1 1 0 0 0 1 0 0 1 1 1 0 0 0 1 1

  --  --    由于只有两位我们按照两位的编码来排,但是我们发现这行不通,

  --  --    因为第7位不是0因此,返回"?"

  --  --   

  --  --例2:0x4F60的二进制:

  --  --    0 1 0 0 1 1 1 1 0 1 1 0 0 0 0 0

  --  --    我们用UTF-8补齐,变成:

  --  --    11100100 10111101 10100000

  --  --    E4--BD-- A0

  --  --    于是返回0xE4,0xBD,0xA0

  --  --

  3.String和byte[]

  --String其实核心是char[],然而要把byte转化成String,必须经过编码。

  --String.length()其实就是char数组的长度,如果使用不同的编码,很可

  --能会错分,造成散字和乱码。

  --例:

  ----byte [] b={(byte)u00c4,(byte)u00e3};

  ----String str=new String(b,encoding);  ----

  ----如果encoding=8859_1,会有两个字,但是encoding=gb2312只有一个字  ----

  --这个问题在处理分页是经常发生

  4.Reader,Writer/InputStream,OutputStream

  --Reader和Writer核心是char,InputStream和OutputStream核心是byte。

  --但是Reader和Writer的主要目的是要把Char读/写InputStream/OutputStream

--一个reader的例子:

--文件test.txt只有一个"你"字,0xC4,0xE3--

--String encoding=;

--InputStreamReader reader=new InputStreamReader(

----new FileInputStream("text.txt"),encoding);

--char []c=new char[10];

--int length=reader.read(c);

--for(int i=0;i<c.length;i++)

----System.out.println(c[i]);

  --如果encoding是gb2312,则只有一个字符,如果encoding=8859_1,则有两个字符

  --------

--

--

   ----

 2.我们要对Java的编译器有所了解:

 --javac -encoding

  我们常常没有用到ENCODING这个参数。其实Encoding这个参数对于跨平台的操作是很重要的。

  如果没有指定Encoding,则按照系统的默认Encoding,gb平台上是gb2312,英文平台上是ISO8859_1。 

 --Java的编译器实际上是调用sun.tools.javac.Main的类,对文件进行编译,这个类 --

 有compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。

 编译器就是根据这个变量来读取java文件的,然后把用UTF-8形式编译成class文件。

 一个例子:

 --public void test()

 --{

 ----String str="你";

 ----FileWriter write=new FileWriter("test.txt");

 ----write.write(str);

 ----write.close();

 --}

 ----例3

--如果用gb2312编译,你会找到E4 BD A0的字段

--

--如果用8859_1编译,

--00C4 00E3的二进制:

--00000000 11000100 00000000 11100011--

--因为每个字符都大于7位,因此用11位编码:

--11000001 10000100 11000011 10100011

--C1-- 84-- C3--  A3

--你会找到C1 84 C3 A3 --

  但是我们往往忽略掉这个参数,因此这样往往会有跨平台的问题:

  --  例3在中文平台上编译,生成ZhClass

  --  例3在英文平台上编译,输出EnClass

  --1.  ZhClass在中文平台上执行OK,但是在英文平台上不行

  --2.  EnClass在英文平台上执行OK,但是在中文平台上不行

  原因:

 --1.在中文平台上编译后,其实str在运行态的char[]是0x4F60, ----

 --在中文平台上运行,FileWriter的缺省编码是gb2312,因此

 --CharToByteConverter会自动用调用gb2312的converter,把str转化

以上是“如何解决Java中文问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何解决Java中文问题

本文链接: https://lsjlt.com/news/233087.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何解决Java中文问题
    这篇文章主要为大家展示了“如何解决Java中文问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Java中文问题”这篇文章吧。我来说一下tomcat如何实现JSP的你就明白了。预备知识:...
    99+
    2023-06-03
  • 怎样解决Java/J2EE中文问题
    这篇文章给大家介绍怎样解决Java/J2EE中文问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。大部分程序员在编程中都遇到过Java中文问题,但是只要你知道了Java系统的中文问题原理,我们就可以对中文问题说拜拜。最...
    99+
    2023-06-17
  • 如何解决java中的死锁问题
    一、死锁的定义死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。那么我们换一个更加规范的定义:集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,...
    99+
    2016-01-19
    java教程 java 死锁
  • 如何解决AJAX中文乱码问题
    本篇内容介绍了“如何解决AJAX中文乱码问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 如何解决ubuntu16.04中文乱码问题
    解决ubuntu16.04中文乱码的方法:1、在ubuntu终端命令行中使用“apt-get install language-pack-zh-hans”命令安装好中文语言包;2、在bash.bashrc配置文件中写入“export LC_...
    99+
    2024-04-02
  • php如何解决中文乱码问题
    小编给大家分享一下php如何解决中文乱码问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php解决中文乱码的方法:1、在head标签里面加入UTF8编码;2、在...
    99+
    2023-06-07
  • php.ini如何解决中文乱码问题
    本篇内容主要讲解“php.ini如何解决中文乱码问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php.ini如何解决中文乱码问题”吧!php.ini解决中文乱码的方法:首先打开php.ini...
    99+
    2023-06-20
  • MYSQL中文乱码问题如何解决
    这篇文章主要介绍了MYSQL中文乱码问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MYSQL中文乱码问题如何解决文章都会有所收获,下面我们一起来看看吧。一、乱码的原因: client客户端的编码不是...
    99+
    2023-07-02
  • mysql5.5中文乱码问题如何解决
    本篇内容介绍了“mysql5.5中文乱码问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!查看MySQL的字符集show ...
    99+
    2023-06-30
  • java并发问题如何解决
    Java中的并发问题可以通过以下几种方式来解决:1. 使用同步机制:可以使用synchronized关键字或者Lock接口来对共享资...
    99+
    2023-08-12
    java
  • 解决Java中properties文件编码问题
    目录1、properties文件显示乱码问题2、读取properties文件乱码3、Spring boot的@ConfigurationProperties读取properties文...
    99+
    2024-04-02
  • 如何解决Java中的java.io.IOException: Broken pipe问题
    这篇文章将为大家详细讲解有关如何解决Java中的java.io.IOException: Broken pipe问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java 中java.io.IOExcep...
    99+
    2023-06-15
  • 如何解决php xmlhttprequest 中文乱码问题
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑如何解决php xmlhttprequest 中文乱码问题解决XMLHttpRequest中文乱码问题通过XMLHttpRequest获取的数据,默认的字符编码是UTF-...
    99+
    2021-08-14
    php xmlhttprequest
  • 如何解决php gd中文乱码问题
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑如何解决php gd中文乱码问题?今天仔细研究了下GD的一些相关技术,顺手也研究下GD中文乱码的问题。 使用GD库输出中文字符串,调用imagestring是没有用的。需...
    99+
    2019-04-17
    php gd
  • 如何解决wordpress URL中文乱码问题
    这篇文章主要介绍了如何解决wordpress URL中文乱码问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。wordpress中跳转URL中文部分全是乱码如:解决办法:ap...
    99+
    2023-06-21
  • 如何解决Springboot-application.properties中文乱码问题
    本篇内容主要讲解“如何解决Springboot-application.properties中文乱码问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决Springboot-applica...
    99+
    2023-06-21
  • mysql csv中文乱码问题如何解决
    这篇文章主要讲解了“mysql csv中文乱码问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql csv中文乱码问题如何解决”吧!mysq...
    99+
    2023-02-14
    mysql csv
  • 如何解决php文件中文名乱码问题
    本文操作环境:Windows7系统,PHP7.1版,Dell G3电脑。如何解决php文件中文名乱码问题php上传文件中文文件名乱码的解决方法文件上传是我们在处理表单提交时候最常用的功能之一,今天写了一个小小的demo,如下:先看结构:ht...
    99+
    2019-04-10
    php 乱码
  • java中FileOutputStream中文乱码问题解决办法
    java中FileOutputStream中文乱码问题解决办法使用FileOutputStream序列化可以直接向文件写入文本内容,代码如下:FileOutputStream outStream = new FileOutputStream...
    99+
    2023-05-31
    java fileoutputstream 乱码
  • Java如何解决高并发问题
    在Java中,可以采用以下几种方式来解决高并发问题:1. 使用线程池:线程池可以有效地管理线程的创建和销毁,避免频繁地创建和销毁线程...
    99+
    2023-10-20
    Java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作