如何解决使用cmd编译java文件出现乱码现象

合集下载

java如何解决乱码问题

java如何解决乱码问题

java如何解决乱码问题java如何解决乱码问题做项目经常会遇到Java中的乱码问题,那么遇到乱码问题怎么解决呢?下面店铺为大家解答一下,希望能帮到大家!分析编码与解码编码就是将字符转为字节,解码就是就是将字节转换为字符。

字节流与字符流对文件的读写操作都是通过字节流来实现的,即使JAVA中有字符流,但是其底层仍然使用的字节流。

乱码问题出现java中使用最频繁的是字符,当我们将文件读入内存并在控制台显示时(字节流--->字符流),就需要用到解码。

如果文件是UTF-8编码,而我们解码时错用成GBK(如果不指定编码,JAVA会采取系统默认编码)来解码,那么只能显示乱码。

而我们写文件时,最好指定编码(UTF-8)。

解决方案示例1将字节流转换为字符流时,我们指定编码格式。

这是我们文件也应该是gb2312编码public static String read(String filename) throws Exception { InputStream is = new FileInputStream(filename); BufferedReader in = new BufferedReader(new InputStreamReader(is, "gb2312")); //指定编码格式String s; StringBuilder sb = new StringBuilder(); while ((s = in.readLine()) != null) { sb.append(s + "n"); } in.close(); return sb.toString();} 示例2直接通过字节流读入,使用String转换为字符时,指定编码。

package com.dy.xidian;import java.io.FileInputStream;import java.io.InputStream;class BufferedInputFile { public static Stringread(String filename) throws Exception { @SuppressWarnings("resource") InputStream is = new FileInputStream(filename); byte[] b = new byte[1024]; is.read(b); return new String(b, "gb2312"); }}public class MemoryInput { public static void main(String[] args) throws Exception { String filename = "E:/html/gb2312.php"; String s = BufferedInputFile.read(filename); System.out.println(s); }} 陷阱I/O操作中有个FileReader类,这个类隐藏了字节流转为字符流的'细节,我们可以这样使用。

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策随着互联网的快速发展,Java在Web项目开发中的应用越来越广泛。

但是在开发过程中,很多程序员都会遇到中文乱码的问题,这不仅影响了用户体验,也给开发者带来了不小的困扰。

本文将针对Java Web项目开发中的中文乱码问题进行分析,并提出解决方法。

一、中文乱码问题的原因1. 字符编码不一致在Java Web项目中,很多地方都会涉及到字符编码的设置,比如在数据库、页面、请求参数等地方。

如果这些地方的字符编码设置不一致,就会导致中文乱码。

2. 数据传输中的转换问题在Web项目中,数据的传输是非常常见的操作。

如果在数据传输过程中没有正确设置编码格式,就会导致中文乱码。

3. 操作系统环境问题在不同的操作系统环境下,可能会存在默认的字符编码设置不一致的问题,也会导致中文乱码。

2. 使用UTF-8编码在开发过程中,建议尽量使用UTF-8编码格式。

UTF-8是一种通用的字符编码格式,能够支持几乎所有的字符。

使用UTF-8编码可以很大程度上解决中文乱码问题。

3. 设置请求和响应的字符编码在Web项目中,可以通过设置请求和响应的字符编码来解决中文乱码问题。

在请求处理的过程中,需要设置合适的字符编码格式,以确保数据传输的正确性。

4. 使用String.getBytes和new String方法进行转换在具体的代码中,可以使用String.getBytes和new String方法进行字符编码的转换。

通过这两个方法可以将字符按照指定的编码进行转换,避免中文乱码问题。

6. 使用第三方库进行编码处理在Java中有一些第三方库可以用来处理字符编码的问题,比如Apache Commons Codec 库、Google Guava库等。

通过使用这些库,可以方便地解决中文乱码问题。

三、总结在Java Web项目开发中,中文乱码问题是一个比较常见的难题。

但是通过合理的设置和编码处理,可以很好地解决这个问题。

java中处理乱码问题个人总结

java中处理乱码问题个人总结
[个人总结]java 中处理乱码问题个人总结
java 乱码的问题的可谓是老生常谈了,自从接触 java 以来,就不断地与中文乱码的问题打交道,最近的 参与的报表工具开发中,遇到的乱码问题更是让人头疼,随着项目工作的进度,自己总结了一下处理乱码的心 得,在这里与大家一起分享一下。
Java 的内核以及 class 文件都是采用的 unicode 的编码,这样 java 程序就具有了很好的跨平台性,随之也就 带来了乱码的问题的麻烦。出现乱码的问题原因主要有两个方面 Java 及 JSP 文件本身编译时产生的乱码和 Java 程序与其他媒介交互产生的乱码。
3、 Java 与文件/流之间的乱码 Java 读 写 文 件 最 常 用 的 类 是 FileInputStream/FileOutputStream 和 FileReader/FileWriter 。 其 中
FileInputStream 和 FileOutputStream 是基于字节流的,常用于读写二进制文件。 读写字符文件建议使用基于字符的 FileReader 和 FileWriter,省去了字节与字符之间的转换。但这两个类
this.encoding = filterConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
其实对于这种情况更简洁的处理办法就是使用 servlet 规范中的过滤器指定编码,在这里也提供一个简单
的配置参考。 Web.xml: <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.test.web.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-ቤተ መጻሕፍቲ ባይዱaram> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

java开发运行出现的乱码问题

java开发运行出现的乱码问题

java开发运行出现的乱码问题许多文件的默认编码是ISO-8859-1,而中文操作系统的缺省编码是GB18030,在此工作空间中建立的工程编码是GB18030.我们常用的编码是UTF-8,能够使得插件有更好的国际支持。

在编写JSP文件时如果没有更改默认编码,则中文无法正常输出,出现乱码。

Eclipse 工作空间的默认编码是操作系统缺省编码,和简体中文操作系统(windows xp,windows 2000)编码一致,为GB18030,则初始建立的java文件也是GB18030。

Java文件------编译成字节码-----java运行配置-----输出到控制台必须保证每个环节的内部转化过程正确,才不会出现乱码。

Eclipse中修改工程空间编码格式方式1、windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧Text fileencoding,选择Other,改变为UTF-8,以后新建立工程其属性对话框中的Text fileencoding 即为UTF-8。

2、windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->ContentTypes,右侧Context Types树,点开Text 中每一颗子项,并在中输入"UTF-8",点update!其他java应用开发相关的文件如:properties、XML等已经由Eclipse缺省指定,分别为ISO8859-1,UTF-8,如开发中确需改变编码格式则可以在此指定。

MyEclipse编码设置我的Myeclipse安装后编码默认是GB18030,外面的人一般推荐用UTF-8。

如果在导入项目后发现乱码现象,那是编码设置设置不对。

全局编码设置:编码设置的方法:ToolBar-->Window-->Preferences-->General-->Workspace-->Textfile encoding,设置合适的编码。

Java中文乱码处理

Java中文乱码处理

Java中⽂乱码处理java编码转换过程我们总是⽤⼀个java类⽂件和⽤户进⾏最直接的交互(输⼊、输出),这些交互内容包含的⽂字可能会包含中⽂。

⽆论这些java类是与数据库交互,还是与前端页⾯交互,他们的⽣命周期总是这样的:1、程序员在操作系统上通过编辑器编写程序代码并且以.java的格式保存操作系统中,这些⽂件我们称之为源⽂件。

2、通过JDK中的javac.exe编译这些源⽂件形成.class类。

3、直接运⾏这些类或者部署在WEB容器中运⾏,得到输出结果。

这些过程是从宏观上⾯来观察的,了解这个肯定是不⾏的,我们需要真正来了解java是如何来编码和被解码的:第⼀步:当我们⽤编辑器编写java源⽂件,程序⽂件在保存时会采⽤操作系统默认的编码格式(⼀般我们中⽂的操作系统采⽤的是GBK编码格式)形成⼀个.java⽂件。

java源⽂件是采⽤操作系统默认⽀持的file.encoding编码格式保存的。

下⾯代码可以查看系统的file.encoding参数值。

System.out.println(System.getProperty("file.encoding"));第⼆步:当我们使⽤javac.exe编译我们的java⽂件时,JDK⾸先会确认它的编译参数encoding来确定源代码字符集,如果我们不指定该编译参数,JDK⾸先会获取操作系统默认的file.encoding参数,然后JDK就会把我们编写的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放⼊内存中。

第三步:JDK将上⾯编译好的且保存在内存中信息写⼊class⽂件中,形成.class⽂件。

此时.class⽂件是Unicode编码的,也就是说我们常见的.class⽂件中的内容⽆论是中⽂字符还是英⽂字符,他们都已经转换为Unicode编码格式了。

在这⼀步中对对JSP源⽂件的处理⽅式有点⼉不同:WEB容器调⽤JSP编译器,JSP编译器⾸先会查看JSP⽂件是否设置了⽂件编码格式,如果没有设置则JSP编译器会调⽤调⽤JDK采⽤默认的编码⽅式将JSP⽂件转化为临时的servlet类,然后再编译为.class⽂件并保持到临时⽂件夹中。

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策
在Java Web项目开发中,中文乱码问题是很常见的。

中文乱码的根本原因是由于编码格式不正确导致的。

在下面,我们将介绍中文乱码问题的常见原因和对策。

1. 原因
(1)编码格式不一致:在 Web 项目中,前端一般采用 UTF-8 编码,而后端可能使用 GBK 或 UTF-8 编码。

因为编码不一致,中文字符就会出现乱码。

(2)数据传输中断:Web 项目中,一般使用 HTTP 协议传输数据。

如果在传输数据过程中,连接中断等情况,就会出现中文乱码。

(3)浏览器编码设置问题:有些用户可能会将浏览器编码设置为 GBK,而某些页面的编码可能是 UTF-8。

这时候就会出现乱码。

(4)数据库编码不一致:在数据存储中,如果前后端使用的数据库编码不一致,就会出现中文乱码。

2. 对策
(2)设置正确的 Content-Type:在 HTTP 数据传输过程中,Content-Type 标明了数据的编码格式。

设置正确的 Content-Type 可以避免中文乱码问题。

(3)使用 URL 编码:在传输中文数据时,可以使用 URL 编码,将中文字符转换成ASCII 码。

这样可以避免中文乱码问题。

总之,在 Java Web 项目中,避免中文乱码问题需要前后端的合作。

可以从设置编码格式、设置正确的 Content-Type、使用 URL 编码、统一数据库编码等多个方面入手,才能避免出现中文乱码的问题。

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策在Java Web项目开发过程中,中文乱码问题是一个常见的挑战。

乱码问题通常发生在将中文数据存储到数据库、从数据库读取中文数据、在页面上展示中文数据等环节,如果不正确处理乱码问题,会导致用户无法正常阅读中文内容,影响用户体验。

下面介绍一些常见的中文乱码问题和对策。

1. 数据库乱码:当将中文数据存储到数据库中时,如果数据库的字符集不是UTF-8,会导致乱码问题。

解决方法是将数据库字符集设置为UTF-8,确保中文数据能够正确存储和读取。

2. 请求参数乱码:当用户提交包含中文字符的表单时,请求参数中的中文字符可能会出现乱码问题。

解决方法是在服务器端统一设置请求参数的编码为UTF-8,可以通过在web.xml文件中添加如下配置实现:```xml<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-c lass><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>``````html<meta charset="UTF-8">```4. 文件编码乱码:如果在Java Web项目中读取外部的文本文件,文件的编码可能与项目编码不一致,导致读取中文内容乱码。

解决java命令行乱码的问题

解决java命令行乱码的问题

解决java命令⾏乱码的问题虚拟机参数加上-Dfile.encoding=GBK -Ddefault.client.encoding=GBK nguage=zh -Duser.region=CN补充:java执⾏cmd命令,返回结果中⽂乱码问题解决public static void main(String[] args) {try {// 执⾏ping命令Process process = Runtime.getRuntime().exec("cmd /c e:&dir");BufferedReader br = new BufferedReader( new InputStreamReader( process.getInputStream(), Charset.forName("GBK") ) );String line = null;while ((line = br.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}我的代码package net.bigwrok;import java.io.BufferedReader;import java.io.InputStreamReader;import java.nio.charset.Charset;public class Test2_net {public static void main(String[] args) {BufferedReader br = null;try {Process p = Runtime.getRuntime().exec("ping 127.0.0.1");br = new BufferedReader(new InputStreamReader(p.getInputStream(),Charset.forName("GBK")));String line = null;StringBuilder sb=new StringBuilder();while ((line = br.readLine()) != null) {sb.append(line+"\n");}System.out.println(sb.toString());} catch (Exception e) {e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (Exception e) {e.printStackTrace();}}}}}结果以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

【免费下载】Java乱码问题解决方案

【免费下载】Java乱码问题解决方案

Java乱码问题解决方案.txt生活是一张千疮百孔的网,它把所有激情的水都漏光了。

寂寞就是你说话时没人在听,有人在听时你却没话说了!Java乱码问题解决方案Java乱码问题一直是困扰初学者的一个难题,下面就根据笔者的经验来给大家一个解决方案。

我写了一个Demo的web应用,解决了乱码问题,点击下载1 问题来源Java的乱码问题,根源在于操作系统、数据库(MySQL)、Web服务器(Tomcat)、页面(JSP)中的编码不一致造成的。

例如,mysql的编码是latin1,而页面上字符的编码是GBK,则就会出现乱码问题。

2 解决方案了解了乱码产生的原因,下面就来看一下如何解决乱码。

事实上,只要保证各个环节的编码一致,就不会产生乱码,所以只要将所有的环节,设置的编码为UTF-8,就不会出现乱码了(为了支持国际化,建议统一设置成UTF-8)。

3 mysql数据库编码的设置(以MySQL 5.0.41为例)查看数据库支持的编码:show character set;这样可以查看mysql数据库支持的所有编码,其中可以看到有支持utf8编码。

mysql> show character set ;+----------+-----------------------------+---------------------+--------+| Charset | Description | Default collation | Maxlen |+----------+-----------------------------+---------------------+--------+| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 || dec8 | DEC West European | dec8_swedish_ci | 1 || cp850 | DOS West European | cp850_general_ci | 1 || hp8 | HP West European | hp8_english_ci | 1 || koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 || latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | greek | ISO 8859-7 Greek | greek_general_ci | 1 | | cp1250 | Windows Central European | cp1250_general_ci | 1 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | | utf8 | UTF-8 Unicode | utf8_general_ci | 3 || ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | | cp866 | DOS Russian | cp866_general_ci | 1 | | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 | | macce | Mac Central European | macce_general_ci | 1 || macroman | Mac West European | macroman_general_ci | 1 | | cp852 | DOS Central European | cp852_general_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | | cp1251 | Windows Cyrillic | cp1251_general_ci | 1 | | cp1256 | Windows Arabic | cp1256_general_ci | 1 | | cp1257 | Windows Baltic | cp1257_general_ci | 1 | | binary | Binary pseudo charset | binary | 1 | | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 | | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 | | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 | +----------+-----------------------------+---------------------+--------+ 36 rows in set (0.00 sec)查看数据库默认的编码: show variables like '%character%'; mysql> show variables like '%character%';+--------------------------+---------------------------------------+| Variable_name | Value |+--------------------------+---------------------------------------+| character_set_client | latin1 || character_set_connection | latin1 || character_set_database | latin1 || character_set_filesystem | binary || character_set_results | latin1 || character_set_server | latin1 || character_set_system | utf8 || character_sets_dir | E:\mysql-5.0.41-win32\share\charsets\ |+--------------------------+---------------------------------------+8 rows in set (0.00 sec)可以看到,mysql数据库中,此时有关字符串的设置的参数,其中“character_set_server”为创建数据库是默认的编码,现在需要将其修改为utf8。

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策在Java Web项目开发中,中文乱码问题是一个常见的挑战。

当我们接收、处理和展示中文数据时,如果不正确地处理字符编码,就可能导致中文乱码的问题。

下面是一些常见的中文乱码问题及其对策。

1. 请求参数中的中文乱码:当浏览器发送一个带有中文参数的请求时,服务器端可能无法正确解析中文字符。

解决方案是在服务器端对请求参数进行解码。

可以通过在Tomcat的server.xml中配置URIEncoding属性来确保正确的解码,例如将URIEncoding 设为"UTF-8"。

2. 数据库中的中文乱码:当我们将中文数据存储到数据库中时,如果数据库的字符编码与传入的数据的字符编码不一致,就会出现中文乱码。

解决方案是在创建数据库表时指定正确的字符编码,并在连接数据库时设置正确的连接字符编码。

可以在创建数据库表时指定字符集为utf8mb4,然后在连接MySQL数据库时将连接字符集设为utf8mb4。

3. 页面展示中的中文乱码:在JSP页面中,如果不指定正确的字符编码,就可能出现中文乱码。

解决方案是在JSP页面的头部指定正确的字符编码,例如设置contentType为"text/html; charset=UTF-8"。

4. 中文文件名的乱码:当我们下载一个中文文件时,浏览器可能无法正确解析中文文件名,导致乱码。

解决方案是通过在响应的header中设置Content-Disposition属性来指定正确的文件名编码。

可以将Content-Disposition的值设置为"attachment; filename*=utf-8''文件名",其中文件名是经过URL编码的。

6. 处理中文乱码的过滤器:为了统一处理中文乱码问题,可以在项目中添加一个字符编码过滤器,将所有的请求和响应的字符编码都统一为UTF-8。

深度剖析java编码,彻底解决java乱码问题_1

深度剖析java编码,彻底解决java乱码问题_1

深度剖析java编码,彻底解决java乱码问题_1理解:1,Java编译器(即编译成class⽂件时)⽤的是unicode字符集。

2,乱码主要是由于不同的字符集相互转换导致的,理论上各个字符的编码规则是不同的,是不能相互转换的,所以根本解决乱码的⽅法就是不要转换编码⽅式,编码⽅式前后统⼀。

3,ASCII、GB2312、GBK、GB18030、Big5、Unicode都是字符集的名称。

它们定义了采⽤1~2个字节的编码规范,为每个字符赋予了⼀个独⼀⽆⼆的编号。

这个编号就是我们所说的“字符编码”。

4, Unicode字符集定义的字符编码并不适合直接通过⽹络传输表达,因为它们必须转换成像0101这样的⼆进制字节流传输。

所以就出现了不同的转换规范实现⽅式:UTF-8,TF-16等。

这些不同的转换规范转换后的编码值和Unicode是不同的.(unicode是字符集,编码实现是utf-8,utf-16等,unicode到utf-8是有算法的,有统⼀的规则,但unicode和gbk等其他的编码⽅式是没有直接联系的不能转换)。

5,不要轻易地使⽤或滥⽤String类的getBytes(encoding)⽅法,更要尽量避免使⽤getBytes()⽅法。

因为这个⽅法是平台依赖的,在平台不可预知的情况下完全可能得到不同的结果。

如果⼀定要进⾏字节编码,则⽤户要确保encoding的⽅法就是当初字符串输⼊时的encoding(即知道以前的编码)。

6, (java 默认的Unicode和外部资源编码的理解)new String(input.getBytes("ISO-8859-1"), "GB18030") 上⾯这段代码代表什么?有⼈会说: “把input字符串从ISO-8859-1编码⽅式转换成GB18030编码⽅式”。

如果这种说法正确,那么⼜如何解释我们刚提到的java字符串都采⽤unicode编码呢? 这种说法不仅是⽋妥的,⽽且是⼤错特错的,让我们⼀⼀来分析,其实事实是这样的:我们本应该⽤ GB18030的编码来读取数据并解码成字符串,但结果却采⽤了ISO-8859-1的编码,导致⽣成⼀个错误的字 符串。

我的java编程乱码问题处理汇总

我的java编程乱码问题处理汇总

乱码对于使用非英语文字程序员基本上是一直缠绕在身边的麻烦事,这个谁也避免不了。

下面是我解决乱码时候的一点小经验。

欢迎指正一、避免乱码的一些注意点:1.尽量使用统一的编码,如果你是重头开发一个系统,特别是Java开发的,推荐从页面到数据库再到配置文件都使用UTF-8进行编码,安全第一。

2.SetCharacterEncodingFilter的使用,这个东西不是万能的,但是没有它就会很麻烦,如果是基于Servlet开发的东西,能用的就给它用上,省心。

不过有一个注意的地方,这个Filter 只是对POST请求有效,GET一律忽略,不信你可以debug一下,看看它怎么做的,至于为什么不过滤get请求,好象是它对GET请求是无能为力的。

3.就如上面所说,GET请求有问题,尽量使用POST请求,这个也是Web开发的一个基本要领:Web Health Warning:Put All Destructive Actions Behind a POST method(from Agile Web Development with Rails)有点扯远了,不过少用GET,是会有回报滴。

4.JavaScript和Ajax乱码的避免,注意JavaScript默认是ISO8859的编码,避免JS/AJAX乱码和GET一样,不要在URL里面使用中文,实在避免不了,就只能在生成链接的时候转码,绝对不能想当然的认为SetCharacterEncodingFilter会帮你做什么事情。

5.尽早统一开发环境,早点模拟真实环境测试,这个好像也有跑题的嫌疑,但凡软件开发都是这么干的,但仍然值得注意。

我这出现过一次状况,程序是在Win下编译的,拿去Linux 上测试没问题,等实际部署的时候代码是在Linux下编译,结果乱码,秋后算帐总觉得有点晚。

二、乱码发生的情况和应对措施1.开发环境乱码由于Java默认使用UTF-8编码,而且网上很多人都建议Struts开发的时候应尽量选用UTF-8做为默认编码,而非GBK。

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策【摘要】在Java Web项目开发中,中文乱码问题一直是开发者们头痛的难题。

本文旨在探讨中文乱码问题的原因及解决方案。

通过分析中文乱码问题的根源,可以明确乱码产生的原因。

探讨了在Java Web项目中如何正确设置字符编码以避免乱码问题的发生。

介绍了使用过滤器处理乱码的方法,通过过滤器可以有效地解决乱码问题。

本文通过对中文乱码问题的分析和解决方案提出了一些有效的对策,希望能够帮助开发者更好地处理中文乱码问题。

展望未来,我们可以进一步研究和优化解决方案,以提升中文乱码问题的处理效率和准确性。

【关键词】Java Web项目开发、中文乱码问题、对策、引言、背景介绍、研究目的、正文、乱码问题分析、乱码原因分析、解决方案探讨、字符编码设置、使用过滤器处理乱码、结论、总结分析、展望未来。

1. 引言1.1 背景介绍在Java Web项目开发中,中文乱码问题一直是开发者们头疼的难题。

随着中文内容在互联网中的普及和应用不断增加,中文乱码问题也变得越发严重。

由于在网络传输过程中,数据的编码格式可能会发生变化,导致中文字符显示时出现乱码现象。

这给用户的浏览体验造成了影响,也给开发人员带来了困扰。

为了更好地解决Java Web项目开发中的中文乱码问题,本文旨在对中文乱码问题进行深入分析,并探讨解决方案。

首先我们将分析中文乱码问题出现的原因,进一步讨论乱码问题的解决方案。

在具体实践中,我们将重点讨论字符编码设置和使用过滤器处理乱码的方法,希望为开发者们提供实用的技术指导。

通过本文的研究和探讨,希望能够为Java Web项目开发中的中文乱码问题提供有效的解决方案,提升项目的稳定性和用户体验,为开发者们的工作带来便利。

1.2 研究目的研究目的是为了解决Java Web项目开发中出现的中文乱码问题,提高系统的稳定性和用户体验。

通过深入分析中文乱码问题的原因,探讨相关的解决方案,并探讨如何正确设置字符编码以及使用过滤器来处理乱码,最终达到消除乱码问题的目的。

Java读取、写入文件如何解决乱码问题

Java读取、写入文件如何解决乱码问题

Java读取、写⼊⽂件如何解决乱码问题读取⽂件流时,经常会遇到乱码的现象,造成乱码的原因当然不可能是⼀个,这⾥主要介绍因为⽂件编码格式⽽导致的乱码的问题。

⾸先,明确⼀点,⽂本⽂件与⼆进制⽂件的概念与差异。

⽂本⽂件是基于字符编码的⽂件,常见的编码有ASCII编码,UNICODE编码、ANSI编码等等。

⼆进制⽂件是基于值编码的⽂件,你可以根据具体应⽤,指定某个值是什么意思(这样⼀个过程,可以看作是⾃定义编码。

)因此可以看出⽂本⽂件基本上是定长编码的(也有⾮定长的编码如UTF-8)。

⽽⼆进制⽂件可看成是变长编码的,因为是值编码嘛,多少个⽐特代表⼀个值,完全由你决定。

对于⼆进制⽂件,是千万不能使⽤字符串的,因为字符串默认初始化时会使⽤系统默认编码,然⽽,⼆进制⽂件因为⾃定义编码⾃然与固定格式的编码会有所冲突,所以对于⼆进制的⽂件只能采⽤字节流读取、操作、写⼊。

对于⽂本⽂件,因为编码固定,所以只要在读取⽂件之前,采⽤⽂件⾃⾝的编码格式解析⽂件,然后获取字节,再然后,通过指定格式初始化字符串,那么得到的⽂本是不会乱码的。

虽然,⼆进制⽂件也可以获取到它的⽂本编码格式,但是那是不准确的,所以不能同⽇⽽语。

具体操作如下:1)获取⽂本⽂件的格式public static String getFileEncode(String path) {String charset ="asci";byte[] first3Bytes = new byte[3];BufferedInputStream bis = null;try {boolean checked = false;bis = new BufferedInputStream(new FileInputStream(path));bis.mark(0);int read = bis.read(first3Bytes, 0, 3);if (read == -1)return charset;if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {charset = "Unicode";//UTF-16LEchecked = true;} else if (first3Bytes[0] == (byte) 0xFE && first3Bytes[1] == (byte) 0xFF) {charset = "Unicode";//UTF-16BEchecked = true;} else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1] == (byte) 0xBB && first3Bytes[2] == (byte) 0xBF) {charset = "UTF8";checked = true;}bis.reset();if (!checked) {int len = 0;int loc = 0;while ((read = bis.read()) != -1) {loc++;if (read >= 0xF0)break;if (0x80 <= read && read <= 0xBF) //单独出现BF以下的,也算是GBKbreak;if (0xC0 <= read && read <= 0xDF) {read = bis.read();if (0x80 <= read && read <= 0xBF)//双字节 (0xC0 - 0xDF) (0x80 - 0xBF),也可能在GB编码内continue;elsebreak;} else if (0xE0 <= read && read <= 0xEF) { //也有可能出错,但是⼏率较⼩read = bis.read();if (0x80 <= read && read <= 0xBF) {read = bis.read();if (0x80 <= read && read <= 0xBF) {charset = "UTF-8";break;} elsebreak;} elsebreak;}}//TextLogger.getLogger().info(loc + " " + Integer.toHexString(read));}} catch (Exception e) {e.printStackTrace();} finally {if (bis != null) {try {bis.close();} catch (IOException ex) {}}}return charset;}private static String getEncode(int flag1, int flag2, int flag3) {String encode="";// txt⽂件的开头会多出⼏个字节,分别是FF、FE(Unicode),// FE、FF(Unicode big endian),EF、BB、BF(UTF-8)if (flag1 == 255 && flag2 == 254) {encode="Unicode";}else if (flag1 == 254 && flag2 == 255) {encode="UTF-16";}else if (flag1 == 239 && flag2 == 187 && flag3 == 191) {encode="UTF8";}else {encode="asci";// ASCII码}return encode;}2)通过⽂件的编码格式读取⽂件流/*** 通过路径获取⽂件的内容,这个⽅法因为⽤到了字符串作为载体,为了正确读取⽂件(不乱码),只能读取⽂本⽂件,安全⽅法! */public static String readFile(String path){String data = null;// 判断⽂件是否存在File file = new File(path);if(!file.exists()){return data;}// 获取⽂件编码格式String code = FileEncode.getFileEncode(path);InputStreamReader isr = null;try{// 根据编码格式解析⽂件if("asci".equals(code)){// 这⾥采⽤GBK编码,⽽不⽤环境编码格式,因为环境默认编码不等于操作系统编码// code = System.getProperty("file.encoding");code = "GBK";}isr = new InputStreamReader(new FileInputStream(file),code);// 读取⽂件内容int length = -1 ;char[] buffer = new char[1024];StringBuffer sb = new StringBuffer();while((length = isr.read(buffer, 0, 1024) ) != -1){sb.append(buffer,0,length);}data = new String(sb);}catch(Exception e){e.printStackTrace();("getFile IO Exception:"+e.getMessage());}finally{try {if(isr != null){isr.close();}} catch (IOException e) {e.printStackTrace();("getFile IO Exception:"+e.getMessage());}}return data;}3)通过⽂件指定的格式写⼊⽂件/*** 按照指定的路径和编码格式保存⽂件内容,这个⽅法因为⽤到了字符串作为载体,为了正确写⼊⽂件(不乱码),只能写⼊⽂本内容,安全⽅法 ** @param data* 将要写⼊到⽂件中的字节数据* @param path* ⽂件路径,包含⽂件名* @return boolean* 当写⼊完毕时返回true;*/public static boolean writeFile(byte data[], String path , String code){boolean flag = true;OutputStreamWriter osw = null;try{File file = new File(path);if(!file.exists()){file = new File(file.getParent());if(!file.exists()){file.mkdirs();}}if("asci".equals(code)){code = "GBK";}osw = new OutputStreamWriter(new FileOutputStream(path),code);osw.write(new String(data,code));osw.flush();}catch(Exception e){e.printStackTrace();("toFile IO Exception:"+e.getMessage());flag = false;}finally{try{if(osw != null){osw.close();}}catch(IOException e){e.printStackTrace();("toFile IO Exception:"+e.getMessage());flag = false;}}return flag;}4)对于⼆进制⽂件⽽且内容很少的,例如Word⽂档等,可以使⽤如下⽅式读取、写⼊⽂件/*** 从指定路径读取⽂件到字节数组中,对于⼀些⾮⽂本格式的内容可以选⽤这个⽅法* 457364578634785634534* @param path* ⽂件路径,包含⽂件名* @return byte[]* ⽂件字节数组**/public static byte[] getFile(String path) throws IOException {FileInputStream stream=new FileInputStream(path);int size=stream.available();byte data[]=new byte[size];stream.read(data);stream.close();stream=null;return data;}/*** 把字节内容写⼊到对应的⽂件,对于⼀些⾮⽂本的⽂件可以采⽤这个⽅法。

Java乱码问题解决

Java乱码问题解决

b.在 HTML 的 head 标签中添加如下语句。 Java 代码 1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
c.保证 JSP 的页面编码与上面两个的 charset 相同,这点我有在文章的第一点说过。 上面的字符集可以根据需要自己灵活选择,不一定非要 utf-8。不过因为 utf-8 对各国语言,特别是中文支持较好,所以推荐 使用。我就曾经遇到过滘在 GB2312 编码的页面无法正常显示的问题。 5.Post 和 Get 传递中文,后台获取乱码。 前台传递中文也分为 Get 和 Post 方法。 a.Get 方法的情况: Get 方法的时候主要是 URL 传递中文。 如果是在 js 文件中,可以使用如下代码进行中文转码。 Js 代码 1. 2. var url ="/s?industry=编码" url = encodeURI(url);
无论使用哪种方法,在后台获取中文的时候都要使用如下代码: Java 代码 1. 2. 3. 【注】 1.对于 request,是指提交内容的编码,指定后可以通过 getParameter()则直接获得正确的字符串,如果不指定,则默认使 用 iso8859-1 编码,为了统一,需要提交指定传输编码。 2.上面代码的第二句好像和第 2 条中给出的公式矛盾。我也纠结了好久,最后发现 ISO8859-1 是一种比较老的编码,通常叫 做 Latin-1,属于单字节编码,正好和计算机最基础的表示单位一致,因此使用它进行转码一般也没有问题。 iso-8859-1 是 JAVA 网络传输使用的标准字符集,而 gb2312 是标准中文字符集,当你作出提交表单等需要网络传输的操作的 时候,就需要把 iso-8859-1 转换为 gb2312 字符集显示,否则如果按浏览器的 gb2312 格式来解释 iso-8859-1 字符集的话, 由于 2 者不兼容,所以会是乱码。为了省事,建议统一使用 utf-8 字符集。 b.POST 方法的情况。 对于 Post 的情况就比较简单了,只需要在 post 的函数调用部分,制定 post 的 header 的字符集,如: Js 代码 1. 2. 3. xmlHttp.open("post", url , true); xmlHttp.setRequestHeader("Content-Type","text/xml; charset= utf-8"); xmlHttp.send(param); request.setCharacterEncoding("utf-8"); String industry = new String( request.getParameter("industry ").getBytes("ISO8859-1"),"UTF-8");

java中如何解决乱码问题总结

java中如何解决乱码问题总结
</head>
<body>你输入的内容为:<%=str%><br>
<form action="test.jsp" method="post">
请输入中文:<input type="text" name="chStr">
<input type="submit" value="确定">
</head>
<body>你输入的内容为:<%=str%><br>
<form action="test.jsp" method="post">
<a href="test2.jsp?chStr=中文">点击这里提交中文参数</a>
</form>
%>
<html>
<head>
<title>中文Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=gbk">
<meta http-equiv=param content=no-cache>
在没有加任何其他处理之前,用request.getParameter(panamName)获取表单提交中的数据,且表单数据中含有中文时,返回的字符串会出现乱码。出现这种问题的原因是Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档