Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串编码为UTF-8_Java_Utf 8 - Fatal编程技术网

Java 将字符串编码为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

我有一个带有“ñ”字符的字符串,我有一些问题。我需要将这个字符串编码为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。

使用

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);