将string编码为UTF-8

我有一个“ñ”字符的string,我有一些问题。 我需要将此string编码为UTF-8编码。 我已经试过这种方式,但它不起作用:

byte ptext[] = myString.getBytes(); String value = new String(ptext, "UTF-8"); 

如何将该string编码为utf-8?

Java中的String对象使用无法修改的UTF-16编码。

唯一可以有不同编码的是byte[] 。 所以如果你需要UTF-8的数据,那么你需要一个byte[] 。 如果你有一个包含意外数据的String ,那么问题出现在一些早期的地方,将某些二进制数据错误地转换为String (即使用了错误的编码)。

如何使用

 ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(myString) 

使用byte[] ptext = String.getBytes("UTF-8"); 而不是getBytes()getBytes()使用所谓的“默认编码”,它可能不是UTF-8。

在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版本,则可以自行声明字符集常量:

 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"); //.... } 

一个Javastring在内部总是用UTF-16编码 – 但是你真的应该这样想:编码是一种在string和字节之间转换的方法。

所以,如果你有一个编码问题,到你有string的时候,修复已经太迟了。 您需要修复从文件,数据库或networking连接创build该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) { //... } 

我使用下面的代码通过指定编码格式来编码特殊字符。

 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"));