簡體   English   中英

將字符串編碼為UTF-8

[英]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-8ISO-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.

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