「java转换中文乱码」java 中文转码

博主:adminadmin 2023-03-18 15:12:07 639

今天给各位分享java转换中文乱码的知识,其中也会对java 中文转码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中文乱码问题

乱码问题也是我一直觉得比较蛋疼的问题,下面是我在网上看到的,楼主可以参考一下

一、Java中文问题的由来

Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。

首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上或基本上就能解决这类乱码问题。

本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:

从页面form提交数据到java程序 byte-char

从java程序到页面显示 char?byte

从数据库到java程序 byte?char

从java程序到数据库 char?byte

从文件到java程序 byte-char

从java程序到文件 char-byte

从流到java程序 byte-char

从java程序到流 char-byte

如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。

二、解决方法

前面已经提到了Java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,下面分别论述(Java或JSP自身产生的乱码请参看第一部分)。

1、JSP与页面参数之间的乱码

JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。

如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解决。

如果不想在每个文件里都写这样两句话,更简洁的办法是使用Servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:

web.xml:

CharacterEncodingFilter

net.vschool.web.CharacterEncodingFilter

encodingGBK

CharacterEncodingFilter

/*

CharacterEncodingFilter.java:

public class CharacterEncodingFilter implements Filter

{

protected String encoding = null;

public void init(FilterConfig filterConfig) throws ServletException

{

this.encoding = filterConfig.getInitParameter("encoding");

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

{

request.setCharacterEncoding(encoding);

response.setContentType("text/html;charset="+encoding);

chain.doFilter(request, response);

}

}

2、Java与数据库之间的乱码

大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=truecharacterEncoding=GBK。

3、Java与文件/流之间的乱码

Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。

4、其他

上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要手动修改代码。解决Java乱码问题的关键在于在字节与字符的转换过程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致。我们以前使用Resin服务器,使用smartUpload组件上传文件,上传文件同时传递的中文参数获取没有乱码问题。当在Linux中把Resin设置成服务后,上传文件同时的中文参数获取出现了乱码。这个问题困扰了我们很久,后来我们分析smartUpload组件的源文件,因为文件上传采用的是字节流的方式,里面包含的参数名称和值也是字节流的方式传递的。smartUpload组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在smartUpload将字节流转换成字符串时采用了系统默认的编码,而将Resin设置成服务后,系统默认的编码可能发生了改变,因此出现了乱码。后来,我们更改了smartUpload的源文件,增加了一个属性charset和setCharset(String)方法,将upload()方法中提取参数语句:

String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1 );

改成了

String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, charset );

出处:

使用jython从python传到Java的中文为乱码如何处理?

在将 Python 代码转换为 Java 代码时,如果出现中文乱码问题,可以考虑以下方法解决:

在 Python 代码中使用 Unicode 编码,并在 Java 代码中设置字符集为 "UTF-8"。

使用 Python 的字符串转码函数,如 .encode('utf-8') ,将字符串转换为 UTF-8 编码。

使用 Java 的字符串转码函数,如 new String(string.getBytes("ISO-8859-1"), "UTF-8") ,将字符串转换为 UTF-8 编码。

使用 Jython 中的 sys 模块,设置系统默认编码为 UTF-8 。

设置环境变量,在命令行中输入 export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"

这些方法中的任意一种都可能有助于解决中文乱码问题,但是具体解决方案取决于应用程序的具体情况。

java程序执行中文乱码如何解决

看你编译没问题,运行时报乱码错误。说明是代码的编码跟DOS系统的编码不一致。

DOS系统是ASCII码,你看一下你代码的编码是什么,应该不是ASCII码,你把你的代码编码转换成ASCII码试试先,不行再转成UTF-8试试,这样应该就解决了(如果是编码不一致的问题的话)

java字节数组转换中文乱码,请求帮助

String str = new String(test,"UTF-16");

System.out.println(str);

打印结果:???流量已使用1000.00MB,剩余0.00MB;(均不含半年包、定向流量包)。超出流量0.00MB,超出流量(不含港澳台)按照约定资费

用java读取txt档案中的中文写入资料库出现中文乱码,怎么解决?

用java读取txt档案中的中文写入资料库出现中文乱码,怎么解决?

1,设定下你资料库的编码,一般设定成UTF-8或者GBK或者GB2312

2,java读取TXT资料时可以转换下编码,再存进资料库,从资料库读取出来后显示时也同样的转换下编码,好像可以用个过滤器来弄的,

MFC向MySQL资料库写入资料,中文乱码怎么解决

① 首先把MySQL的服务停掉 在执行视窗输入: s mysql

② 把伺服器和客户端的字符集改成自己想用的字符集:GB2312或是utf8等……

具体操作为:开启mysql安装目录下的myini.tet;

找到default-character-set,将其改为自己想用的字符集:GB2312或是utf8等……,要注意的是这里有两个default-character-set,用ctrl+f定位在档案最前面输入default就会找到,都要改过来;

③ 重启MySQL伺服器,在执行视窗输入: start mysql

④ 最重要的是一点是,到这里我们已经能够解决乱码问题了,可问题是我们依然还会出现乱码问题,这是因为我们现在的表被建立的时候用的是预设的字符集(latin1),所以这时候我们要把表删除,然后重建就可以了!

java资料库中文乱码怎么解决

可能原因一:资料库不支援中文,或者是资料库编码格式和java程式码编码格式不一致,这种情况需要修改资料库编码格式:

ALTER SYSTEM DISABLE RESTRICTED SESSION;改完编码后执行

sql conn / as sysdba;

sql shutdown immediate;

database closed.

database di *** ounted.

oracle instance shut down.

sql startup mount;

oracle instance started.

total system global area 135337420 bytes

fixed size 452044 bytes

variable size 109051904 bytes

database buffers 25165824 bytes

redo buffers 667648 bytes

database mounted.

sql alter system enable restricted session;

system altered.

sql alter system set job_queue_processes=0;

system altered.

sql alter system set aq_tm_processes=0;

system altered.

sql alter database open;

database altered.

sql alter database character set internal_use UTF-8;

sql shutdown immediate;

sql startup;

可能原因二:java程式码生成插入语句的时候,已经发生乱码现象,这种只能是修改专案编码格式或者是在资料获取的时候直接转译程式码编码格式来实现了。

php读取txt档案写入资料库

等于茫然无知地站在那里。

那些纪念碑树立在亚莫迪凯和内格巴

虽受天鹅神翅拍体撞,

给我一只芦笛,歌唱吧

第二天

你早就被风吹绉了的谎言哈哈

android中读取档案中文乱码怎么解决

修改APP的编码就可以了

右键--Properties--Resource--Text file encoding 选择就可以了

java 读取mysql出现中文乱码?

这个是字符集设定出了问题。首先要看你的资料库是什么字符集。mysql 4.x的多用GBK gb2312一类的中文字符集,5.x以后多用utf8的。

在确定了资料库本身的字符集以后,你再确定你前台程式使用的啥语言。一般java预设的就是utf8 如果不是,你就改成和资料库一样的字符集。只有你2个地方的字符集对应了,才能正常显示。

java档案中的中文乱码怎么解决

原因是写入时使用的字元编码和期望的不一致导致的,因为JVM虚拟机器启动时会因不同的引数使用不同的预设字元编码。

资料库汇入sql后中文乱码怎么解决

肯定是它的资料库和你的资料库的编码不一致。

检视他的资料库的编码,比如为A编码。

检视你的资料库的编码,比如为B编码。

用ultraedit开启指令码档案(给你的sql档案),另存为另一个档案(储存时选择你的编码B)

然后再汇入。

在Servlet写插入资料库时出现中文乱码。怎样解决?拜托了各位 谢谢

写入资料库出现中文乱码?你接收的资料就是乱码吧...写入资料库是不会出现这问题的..你自己看看你接收到的资料是不是就乱码了

求高手解决java 读取mysql资料库资料时的中文乱码问题!急 急 急

根据下面这几个步骤,选择操作

① 首先把MySQL的服务停掉 在执行视窗输入: s mysql

② 把伺服器和客户端的字符集改成自己想用的字符集:GB2312或是utf8等……

具体操作为:开启mysql安装目录下的myini.tet;

找到default-character-set,将其改为自己想用的字符集:GB2312或是utf8等……,要注意的是这里有两个default-character-set,用ctrl+f定位在档案最前面输入default就会找到,都要改过来;

③ 重启MySQL伺服器,在执行视窗输入: start mysql

④ 最重要的是一点是,到这里我们已经能够解决乱码问题了,可问题是我们依然还会出现乱码问题,这是因为我们现在的表被建立的时候用的是预设的字符集(latin1),所以这时候我们要把表删除,然后重建就可以了

java代码中文乱码怎么解决方法

解决乱码问题:可以修改eclipse里的编码格式来解决乱码问题:

1、window-- Preference

2、点击General--Workspace,在右面的窗体找到“Text file encoding”,就可以修改编码格式了

关于java转换中文乱码和java 中文转码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。