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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java文件读取 中文乱码

發布時間:2024/4/14 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java文件读取 中文乱码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1?字節流以及編碼轉換說明

String str = "";

byte[] b_gbk =str.getBytes("GBK");

byte[] b_utf8 =str.getBytes("UTF-8");

String s_gbk = newString(b_gbk,"GBK");

String s_utf8 = newString(b_utf8,"UTF-8");

System.out.println(s_gbk);

System.out.println(s_utf8);

?

環境:Windows系統Eclipse,源碼格式是GBK,為什么寫明環境,主要還是跟系統顯示有關

?

1.1詳細剖析

第一行代碼其實暗含:str是一個GBK編碼的字符串,里面的byte數組存儲的編碼字符串是GBK編碼的。


第二行代碼getBytes是什么意思呢?就是告訴系統,你把str里面的字符串內容,轉換成GBK編碼然后存儲到b_gbk,這就會涉及到GBK編碼轉換成UTF-8編碼,如果理解不了,可以這樣子想:中字在GBK里面的編碼是這樣子這樣子,你看看中字在UTF-8的編碼是什么,告訴我。


第四行代碼后面有指定編碼格式,就是告訴系統,我這個String類型存儲的是GBK編碼的字符串,系統在顯示該字符串的時候,知道其編碼格式,采用GBK來解碼顯示。

?

問題1

java讀取utf-8編碼文件,出現中文亂碼,最大可能的原因是什么?讀取GBK編碼文件,是正常的!

?????上面已經提到過String變量是有編碼的格式要求的,默認情況下,讀取文件的時候會根據系統的默認編碼來讀取,這種情況下,肯定就是亂碼了,因為讀取進去的就是,賦值給String就是GBK編碼。

?

問題2

utf-8BOM的文件會出現?這個符號,這是什么情況?

????原來BOM在文件中也是一種字符存在,因為沒有對應的編碼輸出,所以只能夠顯示這種符號了。所以在應用中不要選擇這種編碼方式就可以了。

?

2 UTF-8或者GBK文本的讀取

有了上面的基礎,就可以讀取文本了。構建一個UTF-8的中文文檔

????public?static?void?method()

??? {

????????try?{

??????????? File? file =?new?File("d:fengyuzaitu.txt");

????????????byte?buffer[] =?newbyte[20];

??????????? FileInputStreamf ileinput =?new?FileInputStream(file);

??????????? fileinput.read(buffer);

??????????? Strings =?new?String(buffer,?"UTF-8");????

??????????? System.out.println(s);

??????????? fileinput.close();?????????

??????? }catch(IOException e) {

??????????? e.printStackTrace();

??????? }

??? }

???

????public?static?void?method1()

??? {

????????try?{

??????????? FileInputStream fileinput =?new?FileInputStream("d:fengyuzaitu.txt");

??????????? InputStreamReader isr =?new?InputStreamReader(fileinput,?"UTF-8");

??????????? BufferedReader br =?new?BufferedReader(isr);

??????????? Stringtest =?"";

??????????? test = br.readLine();

??????????? System.out.println(test);??

??????????? br.close();

??????? }catch(IOException e) {

??????????? e.printStackTrace();

??????? }

??? }

?

這里進行詳細描述:

方法1:直接讀取字節流,然后指定String的編碼類型,也就是字節流當前的編碼類型

方法2:指定讀取文本采用的編碼格式,返回的String實際上就是經過第一種方法的包裝之后返回的。

?

溫馨提示:讀取sqlite數據庫的時候,如果將GBK字節流存儲進去,讀取出來的時候采用getBytes,讀取字節流,然后按照上面的方法進行轉換。






? ? ?本文轉自fengyuzaitu 51CTO博客,原文鏈接:http://blog.51cto.com/fengyuzaitu/1581528,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的Java文件读取 中文乱码的全部內容,希望文章能夠幫你解決所遇到的問題。

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