Java 将字符串编码为UTF-8
我有一个带有“ñ”字符的字符串,我有一些问题。我需要将这个字符串编码为UTF-8编码。我用这种方法试过,但不起作用:Java 将字符串编码为UTF-8,java,utf-8,Java,Utf 8,我有一个带有“ñ”字符的字符串,我有一些问题。我需要将这个字符串编码为UTF-8编码。我用这种方法试过,但不起作用: byte ptext[] = myString.getBytes(); String value = new String(ptext, "UTF-8"); 如何将该字符串编码为utf-8?使用byte[]ptext=string.getBytes(“utf-8”)而不是getBytes()getBytes()使用所谓的“默认编码”,它可能不是UTF-8。使用 ByteBuff
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
如何将该字符串编码为utf-8?使用
byte[]ptext=string.getBytes(“utf-8”)代码>而不是getBytes()
getBytes()
使用所谓的“默认编码”,它可能不是UTF-8。使用
ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
String
Java中的对象使用无法修改的UTF-16编码
唯一可以使用不同编码的是字节[]
。因此,如果需要UTF-8数据,则需要一个字节[]
。如果您有一个包含意外数据的字符串
,则问题在于之前的某个位置错误地将一些二进制数据转换为字符串
(即,它使用了错误的编码).Java字符串在内部总是用UTF-16编码的,但您确实应该这样考虑:编码是在字符串和字节之间进行转换的一种方式
因此,如果您有编码问题,等到您有了字符串时,就太晚了。您需要修复从文件、数据库或网络连接创建字符串的位置。您可以尝试这种方法
byte ptext[] = myString.getBytes("ISO-8859-1");
String value = new String(ptext, "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)
相比,它的优点是不会声明抛出不支持的编码异常
如果您使用的是较旧的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 inputText = "some text with escaped chars"
InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));
并且,如果您想从编码为“ISO-8859-1”的文本文件中读取:
我使用下面的代码通过指定编码格式对特殊字符进行编码
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");
过了一会儿,我解决了这个问题,并设法用下面的方法解决了它
首先我需要导入
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);
如何配置NetBeans默认编码UTF-8的快速分步指南。结果,NetBeans将以UTF-8编码创建所有新文件
NetBeans默认编码UTF-8分步指南
- 转到NetBeans安装目录中的etc文件夹
- 编辑netbeans.conf文件
- 查找netbeans\u默认\u选项行
- 在该行内的引号内添加-J-Dfile.encoding=UTF-8
(示例:
netbeans\u default\u options=“-J-Dfile.encoding=UTF-8”
)
- 重新启动NetBeans
您将NetBeans设置为默认编码UTF-8
您的netbeans\u default\u选项可能在引号内包含其他参数。在这种情况下,在字符串末尾添加-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“
这是link@Michael:很明显,他在从字符串中获取字节时遇到了麻烦。getBytes(编码)是如何漏掉这一点的?我认为第二行只是为了检查他是否能把它转换回来。我把它解释为有一个断开的字符串,并试图通过转换成字节并返回来“修复”它(常见的误解)。没有实际的迹象表明第二行只是在检查结果。@Michael,没有,这只是我的解释。彼得:你说得对,我们需要亚历克斯澄清他的真正意思。除非答案经过编辑,否则不能取消否决票……不清楚你到底想做什么。myString是否正确地包含了ñ字符,并且您在将其转换为字节数组时遇到问题(在这种情况下,请参阅Peter和Amir的答案),或者myString是否已损坏,并且您正在尝试修复它(在这种情况下,请参阅Joachim和我的答案)?我需要将myString发送到具有utf-8编码的服务器,并且需要转换“ñ”字符到utf-8编码。如果服务器需要utf-8,那么您需要发送的是字节,而不是字符串。因此,根据彼得的回答,在第一行中指定编码,并删除第二行。@Michael:我同意不清楚这里的真正意图是什么。似乎有很多问题,人们试图在字符串和字节之间进行显式转换,而不是让{In,Out}putStream{Read,write}ers
为他们进行转换。迈克尔:谢谢,我想这是有道理的。但这也让事情变得更难,不是吗?我不太喜欢这样的语言,所以尽量避免使用它们。我认为Java的字符串模型而不是字节模型使事情变得简单多了。Perl和Python还共享“一切都是Unicode字符串”模型。是的,在这三种情况下,如果你努力工作,你仍然可以得到字节数,但实际上,你真正需要得到字节数的情况似乎很少:这是相当低的级别。另外,如果你知道我的意思,那感觉有点像把猫往错误的方向刷但是如何获得编码字符串呢?它返回一个ByteBuffer@Alex:不可能有UTF-8编码的Java字符串。您需要字节,因此可以直接使用ByteBuffer(如果您的目标是通过网络集合发送它,那么这可能是最好的解决方案),或者对其调用array()以获取字节[]。另外,可能有用的方法是使用Guava的Charsets.UTF_8枚举,而不是使用可能引发不受支持的CodingException的字符串。字符串->字节:myString.getBytes(Charsets.UTF_8)
,字节->字符串:新字符串(myByteArray,Charsets.UTF_8)
。更好的是,使用标准Charsets.UTF_8
。Java 1.7+中提供。通过array()
返回的数组很可能会比需要的大,并且会填充,如下所示
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);