Java UTF-8编码

Java UTF-8编码,java,utf-8,Java,Utf 8,我有一根这样的绳子 String str = "\u0e04\u0e38\u0e13\u0e23\u0e39\u0e49\u0e21\u0e31\u0e49\u0e22\u0e44\u0e14\u0e42\u0e19"; 它实际上看起来像ช1: คุณรู้มั้ยไดโนเสาร์ตั 我想要的是将字符串保持为字符串格式,以便str.charAt(3)是“e”而不是奇怪的字符 如何做到这一点?帮助 进一步解释: 我从文件中获取此字符串。我将文件中的一行读取为字符串,该行显示为“\u0e04\

我有一根这样的绳子

String str = "\u0e04\u0e38\u0e13\u0e23\u0e39\u0e49\u0e21\u0e31\u0e49\u0e22\u0e44\u0e14\u0e42\u0e19";
它实际上看起来像
ช1: คุณรู้มั้ยไดโนเสาร์ตั

我想要的是将字符串保持为字符串格式,以便
str.charAt(3)
是“e”而不是奇怪的字符

如何做到这一点?帮助

进一步解释: 我从文件中获取此字符串。我将文件中的一行读取为字符串,该行显示为“\u0e04\u0e38\u0e13\u0e23\u0e39\u0e49\u0e21\u0e31\u0e49\u0e22\u0e44\u0e14\u0e42\u0e19”。所以在内存中,这个字符串是这样的

代码如下:

FileReader fr = new FileReader("sample2.json");
BufferedReader br = new BufferedReader(fr);

String line;
while((line = br.readLine()) != null)
{
    JSONObject data = new JSONObject(line);
        String text = data.getString("text");
文件中的此行是“\u0e04\u0e38\u0e13\u0e23\u0e39\u0e49\u0e21\u0e31\u0e49\u0e22\u0e44\u0e14\u0e42\u0e19”


现在,我想保留字符串文本的原始格式。

您只需转义每个反斜杠:

String str = "\\u0e04\\u0e38...";

您只需避开每个反斜杠:

String str = "\\u0e04\\u0e38...";

我猜您已经从文件或流中读取了此字符串。 看起来你用了错误的编码 (不是字符串编码时使用的字符串。) 它已写入该文件/流)。 我想这就是为什么你会遇到这个问题

当字符串在内存中时,我们不担心编码 (例如在JVM的内存中)。编码开始 当您需要写入内存中的数据/字符串时,这很重要
文件/流或从文件/流中读取。

我猜您是从文件或流中读取此字符串的。 看起来你用了错误的编码 (不是字符串编码时使用的字符串。) 它已写入该文件/流)。 我想这就是为什么你会遇到这个问题

当字符串在内存中时,我们不担心编码 (例如在JVM的内存中)。编码开始 当您需要写入内存中的数据/字符串时,这很重要 文件/流或从文件/流中读取它。

好的,这看起来很愚蠢,但在您的情况下会起作用:

而不是:

JSONObject data = new JSONObject(line);

JSONObject data = new JSONObject(line.replaceAll("\\\\", "\\\\\\\\"));
问题是JSON转换您的unicode字符是为了您的“方便”。

好的,这看起来很愚蠢,但在您的情况下它会起作用:

而不是:

JSONObject data = new JSONObject(line);

JSONObject data = new JSONObject(line.replaceAll("\\\\", "\\\\\\\\"));


问题是JSON转换unicode字符是为了“方便”。

标准答案,非标准问题。(我没有投反对票,但您回答了“如何防止Java将其视为Unicode转义”,这正是OP在本例中真正想要的。)。这是目前最优雅的解决方案,适用于op的要求。字符(4)是“e”。双斜杠占用一个字符,标准答案,非标准问题。(我没有投反对票,但您回答了“如何防止Java将其视为Unicode转义”,这正是OP在本例中真正想要的。)。这是目前最优雅的解决方案,适用于op的要求。字符(4)是“e”。双斜杠占用了一个字符的时间。您发布的是实际呈现的文本,而不是屏幕截图,这在这里很棘手。您能确认所使用的字体是否具有您想要显示的实际正确字形吗?
charAt(3)
索引以0开头。实际输入和所需输出是什么?想象一下File->JSON->HTML。您发布的是实际呈现的文本,而不是屏幕截图,这将是一个棘手的问题。您能确认所使用的字体是否具有您想要显示的实际正确字形吗?
charAt(3)
索引以0开头。实际输入和所需输出是什么?想象文件->JSON->HTML。谢谢你,彼得。是的,我从文件中读取此字符串以进行一些预处理。现在我想把这个字符串写入一个文件。我能做些什么来保持字符串的原始格式呢?好吧,你只需要找出文件的编码(是UTF-8,是UTF-16,是Windows-1252,等等)。创建文件的人通常定义编码。一旦你知道了这一点,你只需要在Java代码中显式地指定相同的编码,它可以从JVM内存中的这个文件中读取字符串。看起来比我的更具体,也更有用。谢谢你,彼得。是的,我从文件中读取此字符串以进行一些预处理。现在我想把这个字符串写入一个文件。我能做些什么来保持字符串的原始格式呢?好吧,你只需要找出文件的编码(是UTF-8,是UTF-16,是Windows-1252,等等)。创建文件的人通常定义编码。一旦你知道了这一点,你只需要在Java代码中显式地指定相同的编码,它可以从JVM内存中的这个文件中读取字符串。看起来比我的更具体,也更有用。JSON仍然认为它是UTF-8odd。。我想知道我和你做的有什么不同。当您:
System.out.println(line)时会得到什么?此外,您的文件的确切内容是什么(可能在某处在线?)JSON仍然将其识别为UTF-8odd。。我想知道我和你做的有什么不同。当您:
System.out.println(line)时会得到什么?另外,您的文件的确切内容是什么(可能在某个地方在线?)