我有一个带有“ñ”字符的字符串,我遇到了一些问题。我需要将此String编码为UTF-8编码。我已经通过这种方式尝试过,但它不起作用:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
如何将该字符串编码为utf-8?
答案 0 :(得分:160)
如何使用
ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
答案 1 :(得分:127)
String
个对象使用无法修改的UTF-16编码。
唯一可以有不同编码的是byte[]
。因此,如果您需要UTF-8数据,则需要byte[]
。如果您的String
包含意外数据,那么问题就出现在某些错误地将某些二进制数据转换为String
的地方(即使用了错误的编码)。
答案 2 :(得分:66)
使用byte[] ptext = String.getBytes("UTF-8");
代替getBytes()
。 getBytes()
使用所谓的“默认编码”,可能不是UTF-8。
答案 3 :(得分:64)
在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");
//....
}
答案 4 :(得分:31)
Java String在内部始终以UTF-16编码 - 但你真的应该这样想:编码是一种在字符串和字节之间进行转换的方法。
因此,如果您遇到编码问题,那么当您使用String时,修复就太晚了。您需要修复从文件,数据库或网络连接创建该字符串的位置。
答案 5 :(得分:22)
你可以这样试试。
byte ptext[] = myString.getBytes("ISO-8859-1");
String value = new String(ptext, "UTF-8");
答案 6 :(得分: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) {
//...
}
答案 7 :(得分:4)
片刻之后,我遇到了这个问题并设法通过以下方式解决了这个问题
首先我需要导入
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);
答案 8 :(得分:3)
我使用下面的代码通过指定编码格式来编码特殊字符。
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");
答案 9 :(得分:1)
一个快速的分步指南,如何配置NetBeans默认编码UTF-8。结果,NetBeans将以UTF-8编码创建所有新文件。
NetBeans默认编码UTF-8分步指南
在该行内的引号内添加-J-Dfile.encoding = UTF-8
(例如:netbeans_default_options="-J-Dfile.encoding=UTF-8"
)
重新启动NetBeans
您将NetBeans设置为默认编码UTF-8。
您的netbeans_default_options可能在引号内包含其他参数。在这种情况下,请在字符串末尾添加-J-Dfile.encoding = UTF-8。用空格将其与其他参数分开。
示例:
netbeans_default_options =“-J-客户端-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“
答案 10 :(得分:0)
这解决了我的问题
String inputText = "some text with escaped chars"
InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));