java代碼亂碼怎麼轉碼(Java亂碼)

本文目錄一覽:

java如何把string轉為utf-8

java不同編碼之間進行轉換,都需要使用unicode作為中轉。

String str = “任意字符串”;

str = new String(str.getBytes(“gbk”),”utf-8″);

備註說明:

str.getBytes(“UTF-8”); 意思是以UTF-8的編碼取得位元組

new String(XXX,”UTF-8″); 意思是以UTF-8的編碼生成字符串

舉例:

public static String getUTF8XMLString(String xml) {

// A StringBuffer Object

StringBuffer sb = new StringBuffer();

sb.append(xml);

String xmString = “”;

String xmlUTF8=””;

try {

xmString = new String(sb.toString().getBytes(“UTF-8”));

xmlUTF8 = URLEncoder.encode(xmString, “UTF-8”);

System.out.println(“utf-8 編碼:” + xmlUTF8) ;

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// return to String Formed

return xmlUTF8;

擴展資料:

UTF-8編碼規則:

如果只有一個位元組則其最高二進制位為0;如果是多位元組,其第一個位元組從最高位開始,連續的二進制位值為1的個數決定了其編碼的位元組數,其餘各位元組均以10開頭。

實際表示ASCII字符的UNICODE字符,將會編碼成1個位元組,並且UTF-8表示與ASCII字符表示是一樣的。所有其他的UNICODE字符轉化成UTF-8將需要至少2個位元組。每個位元組由一個換碼序列開始。第一個位元組由唯一的換碼序列,由n位連續的1加一位0組成,首位元組連續的1的個數表示字符編碼所需的位元組數。

Unicode轉換為UTF-8時,可以將Unicode二進制從低位往高位取出二進制數字,每次取6位,如上述的二進制就可以分別取出為如下示例所示的格式,前面按格式填補,不足8位用0填補。

參考資料來源:百度百科:UTF-8

java中文亂碼,能說下string.getBytes()和new String()轉碼是,具體點。

1、Java中,【String.getBytes(String decode)】的方法,會根據指定的decode,編碼返回某字符串在該編碼下的byte數組表示,例如:

byte[] b_gbk = “中”.getBytes(“GBK”);

byte[] b_utf8 = “中”.getBytes(“UTF-8”);

byte[] b_iso88591 = “中”.getBytes(“ISO8859-1”)

上面三行代碼表示:分別返回「中」這個漢字在GBK、UTF-8和ISO8859-1編碼下的byte數組表示,此時b_gbk的長度為2,b_utf8的長度為3,b_iso88591的長度為1。

2、而通過【new String(byte[], decode)】的方式來還原這個「中」字時,實際是使用decode指定的編碼來將byte[ ]解析成字符串,例如:

String s_gbk = new String(b_gbk,”GBK”);

String s_utf8 = new String(b_utf8,”UTF-8″);

String s_iso88591 = new String(b_iso88591,”ISO8859-1″);

s_gbk和s_utf8都是「中」,而只有s_iso88591是一個不認識 的字符,因為ISO8859-1編碼的編碼表中,根本就沒有包含漢字字符,當然也就無法通過”中”.getBytes(“ISO8859-1”)。

因此,通過【String.getBytes(String decode)】方法來得到byte[ ]時,要確定decode的編碼表中確實存在String表示的碼值,這樣得到的byte[ ]數組才能正確被還原。

擴展資料

java中文編碼避免亂碼

1、為了讓中文字符適應某些特殊要求(如http header頭要求其內容必須為iso8859-1編碼),可能會通過將中文字符按照位元組方式來編碼的情況,比如:

String s_iso88591 = new String(“中”.getBytes(“UTF-8″),”ISO8859-1”)

2、上述例子中的s_iso8859-1字符串實際是三個在 ISO8859-1中的字符,在將這些字符傳遞到目的地後,目的地程序再通過相反的方式:

String s_utf8 = new String(s_iso88591.getBytes(“ISO8859-1″),”UTF-8”)

來得到正確的中文漢字。這樣就既保證了遵守協 議規定、也支持中文。

3、String.getBytes(String decode)方法會根據指定的decode編碼返回某字符串在該編碼下的byte數組表示這裡是encode ,not decode,從字符串到位元組數組是編碼的過程,從位元組數組到字符串(即 new String(byte[] , charsetname))才是解碼的過程。

參考資料:百度百科-UTF-8

Java中如何把GBK編碼的字符串轉成utf-8編碼

我先解釋一下我對你的問題的理解 :

你的問題有點籠統 可以這麼理解兩個意思 : 一 ,你是想吧一個gbk編碼的字符串用utf-8格式來編碼

String s = new String (“全國”.getBytes(“GBK”),”GBK”);

雖然這個時候的s是GBK編碼的 但是s還是中文字符的 所以 上面這位同胞用 new(s.getBytes(“GBK”),”UTF-8″)的方式肯定是錯的 應該用 String s1 = new String (s.getBytes(“UTF-8″),”UTF-8”) 這樣s1就是UTF-8編碼的字符串了

二,如果是遇見亂碼問題 比如 String s = new String (“全國”.getBytes(“GBK”),”GBK”);

這樣的s就是gbk編碼的 現在你要把GBK格式的編碼用UTF-8去編碼 肯定就會出現亂碼

String s2 = new String(s.getBytes(“GBK”),”UTF-8″); 這個s2肯定是亂碼的 而且這樣就根本解不出來了 系統出現的亂碼顯示的時候才會出現編碼錯誤 所以 一般出現亂碼 只要把輸入流換個編碼解析一下就ok了 還有什麼不明白 可以問我

java爬蟲一段話里的部分字符亂碼解決

1. 網絡爬蟲亂碼的原因。

源網頁的編碼與抓取後的編碼轉換不一致。如果源網頁是gbk編碼的位元組流,程序在我們抓取後直接用utf-8編碼輸出到存儲文件,這必然會造成亂碼,即當源網頁編碼與程序抓取後直接處理編碼一致時,就不會出現亂碼,然後統一字符編碼後也就不會出現亂碼。注意區分源網絡代碼A,程序B直接使用的代碼,統一轉換字符的代碼C。

2. 是網頁的服務器端代碼。

B.捕獲的數據原本是位元組數組,由A編碼,只有B=A才能保證不會出現亂碼;否則,當字符集不兼容時,就會出現亂碼字符。這一步常用於測試。

c、統一轉碼是指在獲得網頁的原始編碼A後進行統一編碼,主要是將每個網頁的數據統一成一種編碼,往往首選字符集較大的utf-8。

每個網頁都有自己的代碼,比如gbk,utf-8,iso8859-1,日本jp系統代碼,西歐,俄語等等。爬行時,所有類型的代碼都將被擴展。有的爬蟲只是簡單的識別網頁,然後統一編碼,有的則直接按照utf-8統一處理,不需要判斷源網頁,顯然會造成亂碼。

3. 亂碼的解決方案。

根據原因找到解決辦法很簡單。

1) 確定源網頁的代碼a。

代碼a通常位於網頁的三個位置,即httpheader的內容、網頁的元字符集和網頁標題中的文檔定義。獲取源網頁代碼時,依次判斷這三部分數據,從頭到尾優先級相同。

理論上這是對的,但是國內有些網站不符合標準。比如寫出來的gbk其實是utf-8,有的寫出來是utf-8,其實是gbk。當然這是幾個網站,但是確實存在。因此,在確定網頁編碼時,應該對這種特殊情況給予特殊處理,如中文檢查、默認編碼等策略。

在另一種情況下,如果以上三種都沒有編碼信息,一般使用第三方的網頁編碼智能識別工具,如cpdetector。原理是通過統計位元組數組的特性來計算實際編碼,有一定的準確率,但是我發現在實踐中準確率還是很有限的。

但是綜合以上三種編碼確認方法後,中文亂碼的問題幾乎可以完全解決。在我的基於nutch1.6的網絡爬蟲系統中,經過統計,編碼準確率可以達到99.99%,這也證明了上述方法和策略的可行性。

2) 程序通過代碼b還原源網頁數據。

顯然,這裡的B應該等於a,在java中,如果源網頁的位元組數組是source_byte_array,就會轉換成stringstr=newstring(source_byte_array,B)。即這些位元組數組對應的字符被正確編碼顯示在內存中,此時打印結果正常。此步驟通常用於調試或控制台輸出測試。

3) 統一轉碼。

網絡爬蟲系統中有很多數據源。如果無法使用數據,它將被轉換為其原始數據,如果這樣做是浪費的。所以一般爬蟲系統要對抓取的結果進行統一編碼,做到一致,使用方便。此時,在(2)的基礎上,可以進行統一的編碼轉換,在java中的實現如下。

源網頁的位元組數組是source_byte_array。

轉換為普通字符串:stringnormal_source_str=newstring(source_byte_array,c)。這時候可以直接用javaapi存儲,但是字符串往往不直接寫。因為一般爬蟲存儲是將多個源網頁存儲在一個文件中,所以要記錄位元組偏移量,所以下一步。 再將得到的str轉換為統一的編碼C格式的位元組數組,則byte[] new_byte_array=normal_source_str.getBytes(C)即可,此時即可用java io api將數組寫入文件,並記錄相應的位元組數組偏移量等,待真正使用時,直接io讀取即可。

爬蟲過程不僅會存在亂碼問題,還會存在網站爬取涉及法律、IP受限,爬取行為受限等等問題,這個時候就需要不斷去解決這些問題。

java 如何將「你好」轉成UTF-8 「\u4F60\u597D」 這種編碼

這個是unicode碼,並不是UTF-8編碼,是統一碼,它為每種語言中的每個字符設定了統一併且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。

處理方法如下

public static String toUnicode(String s) {

StringBuilder sb = new StringBuilder();

for (int i = 0; i s.length(); ++i) {

if (s.charAt(i) = 256) {

sb.append(“\\u00”);

} else {

sb.append(“\\u”);

}

sb.append(Integer.toHexString(s.charAt(i)));

}

return sb.toString();

}

public static void main(String[] args) {

String s = “你好”;

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

}

java使用property中文亂碼

你的properties中的中文是經過 ascii轉碼的嗎?比如中文變成了這樣子: \u8be5\u8d44\u6e90\u7c7b\u578b\u5df2\u7ecf\u5b58\u5728\uff01

如果是,那麼只需要將讀到的字符串做一下轉碼即可。

你可以在String username=property.getProperty(“username”);之後,添加JAVA代碼也可以將亂碼轉為中文的。用如下語句就可以了,username =new String(username.getBytes(“ISO-8859-1″),”gbk”); 然後再用resultName就可以了,不過這樣的話你下面的String password=property.getProperty(“password”);

都慢慢的通過上面的java代碼去轉。 

不知道你對反射熟悉不?如果熟悉的話可以通過反射機制去做轉碼就方便多了!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/227418.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-09 16:29
下一篇 2024-12-09 16:29

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29

發表回復

登錄後才能評論