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