将字符串编码为UTF-8

时间:2011-04-20 11:55:43

标签: java utf-8

我有一个带有“ñ”字符的字符串,我遇到了一些问题。我需要将此String编码为UTF-8编码。我已经通过这种方式尝试过,但它不起作用:

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

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

11 个答案:

答案 0 :(得分:160)

如何使用

ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)

答案 1 :(得分:127)

Java中的

String个对象使用无法修改的UTF-16编码。

唯一可以有不同编码的是byte[]。因此,如果您需要UTF-8数据,则需要byte[]。如果您的String包含意外数据,那么问题就出现在某些错误地将某些二进制数据转换为String的地方(即使用了错误的编码)。

答案 2 :(得分:66)

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

答案 3 :(得分:64)

在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版本,则可以自己声明charset常量:

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");
    //....
}

答案 4 :(得分:31)

Java String在内部始终以UTF-16编码 - 但你真的应该这样想:编码是一种在字符串和字节之间进行转换的方法。

因此,如果您遇到编码问题,那么当您使用String时,修复就太晚了。您需要修复从文件,数据库或网络连接创建该字符串的位置。

答案 5 :(得分:22)

你可以这样试试。

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

答案 6 :(得分: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) {
    //...
}

答案 7 :(得分:4)

片刻之后,我遇到了这个问题并设法通过以下方式解决了这个问题

首先我需要导入

import java.nio.charset.Charset;

然后我必须声明一个常量来使用UTF-8ISO-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);

答案 8 :(得分:3)

我使用下面的代码通过指定编码格式来编码特殊字符。

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

答案 9 :(得分:1)

一个快速的分步指南,如何配置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-客户端-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“

这是链接for Further Details

答案 10 :(得分:0)

这解决了我的问题

    String inputText = "some text with escaped chars"
    InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));