我有一个包含“ñ”字符的字符串,并且我遇到了一些问题。我需要将这个字符串编码为UTF-8编码。我已经尝试了下面的方式,但它没有起作用:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
我该如何将该字符串编码为 utf-8?
我有一个包含“ñ”字符的字符串,并且我遇到了一些问题。我需要将这个字符串编码为UTF-8编码。我已经尝试了下面的方式,但它没有起作用:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
我该如何将该字符串编码为 utf-8?
使用以下方法如何?
ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
myString.getBytes(Charsets.UTF_8)
,字节->字符串:new String(myByteArray, Charsets.UTF_8)
。 - laughing_manStandardCharsets.UTF_8
。Java 1.7及以上版本支持。 - Katarray()
返回的数组很可能比实际需要的要大,并且填充,因为它是 ByteBuffer
的内部数组。最好使用 string.getBytes(StandardCharsets.UTF_8)
,它将返回一个具有正确大小的新数组。 - ChirloJava
中的String
对象使用UTF-16编码,无法修改*。
唯一可以具有不同编码的是byte[]
。因此,如果您需要UTF-8数据,则需要一个byte[]
。如果您有一个包含意外数据的String
,则问题在于之前某个位置错误地将一些二进制数据转换为String
(即使用了错误的编码)。
* 作为实现的一部分,当字符范围适合时,String
可以在内部使用ISO-8859-1编码的byte[]
,但这是一种实现特定的优化,对String
的用户不可见(即除非您深入源代码或使用反射来深入String
对象,否则您永远不会注意到它)。
byte[]
附加编码才有意义,对于String
来说没有意义(除非编码是UTF-16,在这种情况下它有意义,但仍然是不必要的信息)。 - Joachim Sauer在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");
//....
}
使用byte[] ptext = String.getBytes("UTF-8");
代替getBytes()
。 getBytes()
使用所谓的“默认编码”,可能不是UTF-8。
Java字符串在内部始终以UTF-16编码,但您应该像这样考虑它:编码是在字符串和字节之间进行转换的一种方式。
因此,如果您遇到编码问题,当您拥有String对象时,修复已经为时过晚。您需要修复创建该String对象的位置,例如从文件、数据库或网络连接中构建字符串。
你可以尝试这种方式。
byte ptext[] = myString.getBytes("ISO-8859-1");
String value = new String(ptext, "UTF-8");
在某个时刻,我遇到了这个问题,并成功用以下方法解决了它。
首先,我需要导入:
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 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");
netbeans_default_options="-J-Dfile.encoding=UTF-8"
)
5. 重新启动NetBeans。
6. 您已经设置了NetBeans默认编码为UTF-8。此处有一个链接,可供进一步了解:详细信息。netbeans_default_options="-J-client -J-Xss128m -J-Xms256m -J-XX:PermSize=32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true -J-Dfile.encoding=UTF-8"