簡體   English   中英

Java UTF-8編碼

[英]Java UTF-8 encoding

我有這樣的字符串

String str = "\u0e04\u0e38\u0e13\u0e23\u0e39\u0e49\u0e21\u0e31\u0e49\u0e22\u0e44\u0e14\u0e42\u0e19";

實際上看起來像ช1: คุณรู้มั้ยไดโนเสาร์ตั

我想要的是將字符串保留為字符串格式,以便str.charAt(3)是'e'而不是一個奇怪的字符。

這個怎么做? 救命

進一步說明:我從文件獲取此字符串。 我在文件中的一行讀取了一個字符串,該行似乎是“ \\ u0e04 \\ u0e38 \\ u0e13 \\ u0e23 \\ u0e39 \\ u0e49 \\ u0e21 \\ u0e31 \\ u0e49 \\ u0e22 \\ u0e44 \\ u0e14 \\ u0e42 \\ u0e19”。 因此在內存中,此字符串就是這樣。

代碼在這里:

FileReader fr = new FileReader("sample2.json");
BufferedReader br = new BufferedReader(fr);

String line;
while((line = br.readLine()) != null)
{
    JSONObject data = new JSONObject(line);
        String text = data.getString("text");

文件中的這一行是“ \\ u0e04 \\ u0e38 \\ u0e13 \\ u0e23 \\ u0e39 \\ u0e49 \\ u0e21 \\ u0e31 \\ u0e49 \\ u0e22 \\ u0e44 \\ u0e14 \\ u0e42 \\ u0e19”

現在,我想將字符串文本保留為其原始格式。

您只需要轉義每個反斜杠:

String str = "\\u0e04\\u0e38...";

我想您已經從文件或流中讀取了此字符串。 似乎您使用了錯誤的編碼(而不是將String寫入該文件/流時使用的String編碼)來讀取它。 我想,這就是您遇到這個問題的原因。

當字符串在內存中(例如在JVM的內存中)時,我們不必擔心編碼。 當您需要將內存中的數據/字符串寫入文件/流或從文件/流中讀取時,編碼就變得很重要。

好的,這看起來很愚蠢,但是可以解決您的問題:

代替:

JSONObject data = new JSONObject(line);

JSONObject data = new JSONObject(line.replaceAll("\\\\", "\\\\\\\\"));

問題在於JSON會為您的“方便”轉換您的Unicode字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM