我有一个带有“ñ”字符的字符串,并且我有一些问题。我需要将此字符串编码为UTF-8编码。我已经通过这种方式尝试过,但是没有用:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
如何将该字符串编码为utf-8?
{In,Out}putStream{Read,Writ}ers
它们为它们做转换,这似乎有很多问题。我想知道为什么?
我有一个带有“ñ”字符的字符串,并且我有一些问题。我需要将此字符串编码为UTF-8编码。我已经通过这种方式尝试过,但是没有用:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
如何将该字符串编码为utf-8?
{In,Out}putStream{Read,Writ}ers
它们为它们做转换,这似乎有很多问题。我想知道为什么?
Answers:
String
Java中的对象使用无法修改的UTF-16编码。
唯一可以使用不同编码的是byte[]
。因此,如果您需要UTF-8数据,则需要一个byte[]
。如果您有一个String
包含意外数据的,则问题出在较早的地方,该错误地将一些二进制数据错误地转换为a String
(即,使用了错误的编码)。
byte[]
,而没有意义String
(除非编码是UTF-16,在这种情况下它是有意义的,但仍然是不必要的信息)。
String objects in Java use the UTF-16 encoding that can't be modified.
您对此报价有官方消息吗?
怎么样使用
ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
myString.getBytes(Charsets.UTF_8)
和字节->字符串:new String(myByteArray, Charsets.UTF_8)
。
StandardCharsets.UTF_8
。在Java 1.7+中可用。
在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");
//....
}
String value = new String(myString);
。
使用byte[] ptext = String.getBytes("UTF-8");
代替getBytes()
。getBytes()
使用所谓的“默认编码”,可能不是UTF-8。
Java字符串内部始终使用UTF-16进行编码-但您确实应该这样考虑:编码是一种在字符串和字节之间进行转换的方法。
因此,如果您遇到编码问题,那么当您有了String时,修复为时已晚。您需要修复从文件,数据库或网络连接创建该字符串的位置。
过了一会儿,我经历了这个问题,并设法通过以下方式解决了这个问题
首先我需要导入
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) {
//...
}
快速分步指南如何配置NetBeans默认编码UTF-8。结果,NetBeans将以UTF-8编码创建所有新文件。
NetBeans默认编码UTF-8分步指南
转到NetBeans安装目录中的etc文件夹
编辑netbeans.conf文件
查找netbeans_default_options行
在该行内的引号内添加-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-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”
这是更多详细信息的链接
这解决了我的问题
String inputText = "some text with escaped chars"
InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));