我有一个“ñ”字符的字符串,我有一些问题。我需要将这个字符串编码为UTF-8编码。我试过这种方法,但行不通:

byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");

如何将该字符串编码为utf-8?


当前回答

Java中的字符串对象使用不能修改的UTF-16编码*。

唯一可以有不同编码的是字节[]。因此,如果需要UTF-8数据,则需要一个字节[]。如果你有一个包含意外数据的字符串,那么问题是在之前的某个地方错误地将一些二进制数据转换为字符串(即它使用了错误的编码)。

*作为实现的问题,String可以在内部使用ISO-8859-1编码的字节[],当字符范围适合它时,但这是一个特定于实现的优化,对String的用户来说是不可见的(即你永远不会注意到,除非你深入源代码或使用反射深入String对象)。

其他回答

使用byte[] ptext = String.getBytes("UTF-8");而不是getBytes()。getBytes()使用所谓的“默认编码”,可能不是UTF-8。

如何配置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-Dapple.laf -J-XX: PermSize = 32米。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”

这里是进一步详细信息的链接

Java String在内部总是用UTF-16编码——但是你真的应该这样想:编码是一种在字符串和字节之间转换的方式。

如果你有编码问题,当你有字符串的时候,就来不及修正了。您需要修复从文件、DB或网络连接中创建字符串的位置。

Java中的字符串对象使用不能修改的UTF-16编码*。

唯一可以有不同编码的是字节[]。因此,如果需要UTF-8数据,则需要一个字节[]。如果你有一个包含意外数据的字符串,那么问题是在之前的某个地方错误地将一些二进制数据转换为字符串(即它使用了错误的编码)。

*作为实现的问题,String可以在内部使用ISO-8859-1编码的字节[],当字符范围适合它时,但这是一个特定于实现的优化,对String的用户来说是不可见的(即你永远不会注意到,除非你深入源代码或使用反射深入String对象)。

怎么使用呢?

ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)