日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 常见中文乱码问题解决

發布時間:2025/4/5 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 常见中文乱码问题解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

關于中文亂碼:

一、

1).在jsp頁面上輸入中文,要保證中文不亂碼,有三個前提:

保證contentType=“text/html;charset=UTF-8”,pageEncoding=“UTF-8” charset和pageEncoding的編碼一致,且都支持中文,通常建議取值為UTF-8,還需要擺正瀏覽器的顯示的字符編碼也和請求的jsp頁面的編碼一致。

2)、常見問題實例:(比如兩個jsp,b.jsp獲取a.jsp頁面傳過來的參數值,method為POST)

a.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>中文亂碼</title> </head> <body><form action="hello.jsp" method="post">userName:<input type="text" name="userName"/><input type="submit" value="Submit"/></form> </body> </html> b.jsp<!--將請求的編碼設置成UTF-8可以解決post的問題,但必須在獲取請求參數之前設置編碼 --><%request.setCharacterEncoding("UTF-8");%> <%= request.getParameter("userName")%>

獲取中文參數值:默認參數在傳輸過程中使用的編碼為ISO-8859-1.

上面方法對get請求無效,在get請求得按下面方式解碼轉碼:

<%String val = request.getParameter("userName");String userName = new String(val.getBytes("ISO-8859-1"),"UTF-8");out.print(userName+"=="); %>

上面方式比較復雜,有種方式可以既適用于get請求又適用于post請求,修改tomcat參數,中文亂碼是tomcat的 問題:

首先修改本地tomcat服務器/conf/server.xml中的:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true"/><!-- 加一句useBodyEncodingForURI="true"-->

?

不要忘了在exclipse中也改一下tomcat的映射配置文件server.xml,useBodyEncodingForURI這個屬性的意思是使用body里指定的字符編碼,比URIEncoding要靈活一點,比如body已經指定了UTF-8,那么上面解碼轉碼的方式還會是亂碼,因為這個屬性已經指定了字符集utf-8,解碼也必須utf-8.

二、解析txt文檔亂碼。

????windows下的文本文件字符集默認是GBK2312/GBK,在使用字符流或字節流讀取文本文件的時候,文本文件可能是不同的字符集,比如有ANSI、GBK、UTF-8、Unicode等等,要想讀入的數據不亂碼,一點要保證讀流傳入的字符集和文本文件的字符集一致,這樣不論文本文件的字符集是什么都可以防止亂碼,所以要獲取文本文件的字符集,比較專業一點的方法可以去找一下文件探測器,下面介紹一個比較實用的實例:

?

package com.hnasys.fft.web.component.file.analyze;import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.Field; import java.util.LinkedList; import java.util.List;import com.hnasys.fft.tool.land.Reflects;public class TabFileAnalyzer {public static String codeString(File fileName) throws Exception{@SuppressWarnings("resource")BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName));int p = (bin.read() << 8) + bin.read();String code = null;switch (p) {case 0xefbb:code = "UTF-8";break;case 0xfffe:code = "Unicode";break;case 0xfeff:code = "UTF-16BE";break;case 0x5c75:code = "ANSI|ASCII" ;break ;default:code = "GBK";}return code;}public static <T> void analyze(File file, List<T> datas, Class<T> beanClass) {BufferedReader br = null;List<String> lines = new LinkedList<String>();try {try {//讀流時傳入所讀的文本文件的字符集,這樣就可以保持傳入的文本文件的字符編碼可讀入時候所用編碼一致br = new BufferedReader(new InputStreamReader(new FileInputStream(file), codeString(file)));} catch (Exception e) {e.printStackTrace();}String line = "";while ((line = br.readLine()) != null) {if (!line.trim().isEmpty()) {lines.add(line + " ");}}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {br.close();} catch (IOException e) {e.printStackTrace();}}for (String line : lines) {T obj = null;try {obj = beanClass.newInstance();} catch (InstantiationException e) {throw new RuntimeException("創建對象失敗", e);} catch (IllegalAccessException e) {throw new RuntimeException("創建對象失敗", e);}String[] lineCols = line.split("\t");List<Field> fields = Reflects.getFields(beanClass);for (Field field : fields) {String value = lineCols[fields.indexOf(field)];if (value == null)continue;value = value.trim();if ("N/A".equals(value) || value.isEmpty())continue;// 實際類型字段值Object rv = null;// 設置到對象中if (field.getType() == String.class)rv = value;else if (field.getType() == Integer.class)rv = Integer.valueOf(value);else if (field.getType() == Double.class)rv = Double.valueOf(value);elsethrow new RuntimeException("暫不支持除String、Integer、Double以外的類型");// 設置到字段中field.setAccessible(true);try {field.set(obj, rv);} catch (IllegalArgumentException | IllegalAccessException e) {throw new RuntimeException(e);}}datas.add(obj);}} }

?

轉載于:https://my.oschina.net/u/2493918/blog/783183

總結

以上是生活随笔為你收集整理的java 常见中文乱码问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。