我有一个带有“ñ”字符的字符串,但我遇到了一些问题。我需要将此字符串编码为 UTF-8 编码。我已经通过这种方式尝试过,但它不起作用:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
如何将该字符串编码为 utf-8?
{In,Out}putStream{Read,Writ}ers
为他们做这件事。我想知道为什么?
怎么用
ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
String
Java 中的对象使用无法修改的 UTF-16 编码*。
唯一可以有不同编码的是 byte[]
。因此,如果您需要 UTF-8 数据,那么您需要一个 byte[]
。如果您有一个包含意外数据的 String
,那么问题出在某个较早的地方,将一些二进制数据错误地转换为 String
(即,它使用了错误的编码)。
* 作为实现问题,当字符范围适合它时,String
可以 internally use a ISO-8859-1 encoded byte[]
,但这是一个特定于实现的优化,对 String
的用户不可见(即,您永远不会请注意,除非您深入研究源代码或使用反射来研究 String
对象)。
byte[]
有意义,对 String
没有意义(除非编码是 UTF-16,在这种情况下它是有意义的,但它仍然是不必要的信息)。
String objects in Java use the UTF-16 encoding that can't be modified.
您有此报价的官方来源吗?
在 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 时,再修复为时已晚。您需要修复从文件、数据库或网络连接创建该字符串的位置。
你可以试试这个方法。
byte ptext[] = myString.getBytes("ISO-8859-1");
String value = new String(ptext, "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);
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) {
//...
}
我使用下面的代码通过指定编码格式来编码特殊字符。
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");
如何配置 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"));
不定期副业成功案例分享
myString.getBytes(Charsets.UTF_8)
和字节 ->字符串:new String(myByteArray, Charsets.UTF_8)
。StandardCharsets.UTF_8
。在 Java 1.7+ 中可用。array()
返回的数组很可能比需要的大并被填充,因为它是ByteBuffer
的内部数组。最好使用string.getBytes(StandardCharsets.UTF_8)
它将返回一个具有正确大小的新数组。