[英]Encode String to UTF-8
我有一個帶有“ñ”字符的字符串,我遇到了一些問題。 我需要將此String編碼為UTF-8編碼。 我通過這種方式嘗試過,但它不起作用:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
如何將該字符串編碼為utf-8?
如何使用
ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
Java中的String
對象使用無法修改的UTF-16編碼。
唯一可以有不同編碼的是byte[]
。 因此,如果您需要UTF-8數據,那么您需要一個byte[]
。 如果你有一個包含意外數據的String
,那么問題是在某些較早的地方錯誤地將一些二進制數據轉換為String
(即它使用了錯誤的編碼)。
在Java7中,您可以使用:
import static java.nio.charset.StandardCharsets.*;
byte[] ptext = myString.getBytes(ISO_8859_1);
String value = new String(ptext, UTF_8);
這比getBytes(String)
更有優勢,它不會聲明throws UnsupportedEncodingException
。
如果您使用的是較舊的Java版本,則可以自己聲明charset常量:
import java.nio.charset.Charset;
public class StandardCharsets {
public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
public static final Charset UTF_8 = Charset.forName("UTF-8");
//....
}
使用byte[] ptext = String.getBytes("UTF-8");
而不是getBytes()
。 getBytes()
使用所謂的“默認編碼”,它可能不是UTF-8。
Java String在內部總是以UTF-16編碼 - 但你真的應該這樣想:編碼是一種在字符串和字節之間進行轉換的方法。
因此,如果您遇到編碼問題,那么當您使用String時,修復就太晚了。 您需要修復從文件,數據庫或網絡連接創建該String的位置。
你可以試試這種方式。
byte ptext[] = myString.getBytes("ISO-8859-1");
String value = new String(ptext, "UTF-8");
String value = new String(myString.getBytes("UTF-8"));
並且,如果您想從帶有“ISO-8859-1”編碼的文本文件中讀取:
String line;
String f = "C:\\MyPath\\MyFile.txt";
try {
BufferedReader br = Files.newBufferedReader(Paths.get(f), Charset.forName("ISO-8859-1"));
while ((line = br.readLine()) != null) {
System.out.println(new String(line.getBytes("UTF-8")));
}
} catch (IOException ex) {
//...
}
過了一會兒,我遇到了這個問題並設法通過以下方式解決了這個問題
首先我需要導入
import java.nio.charset.Charset;
然后我必須聲明一個常量來使用UTF-8
和ISO-8859-1
private static final Charset UTF_8 = Charset.forName("UTF-8");
private static final Charset ISO = Charset.forName("ISO-8859-1");
然后我可以通過以下方式使用它:
String textwithaccent="Thís ís a text with accent";
String textwithletter="Ñandú";
text1 = new String(textwithaccent.getBytes(ISO), UTF_8);
text2 = new String(textwithletter.getBytes(ISO),UTF_8);
我使用下面的代碼通過指定編碼格式來編碼特殊字符。
String text = "This is an example é";
byte[] byteText = text.getBytes(Charset.forName("UTF-8"));
//To get original string from byte.
String originalString= new String(byteText , "UTF-8");
這解決了我的問題
String inputText = "some text with escaped chars"
InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.