【发布时间】:2020-07-28 12:02:05
【问题描述】:
我有一个带有单个 unicode 符号的文件。
该文件以 UTF-8 编码。
它包含一个以 4 个字节表示的符号。
https://www.fileformat.info/info/unicode/char/1f60a/index.htm
F0 9F 98 8A
当我读取文件时,我得到两个符号/字符。
下面的程序打印
?
2
?
?
55357
56842
======================================
��
16
&
======================================
?
2
?
======================================
这是正常的……还是错误?还是我误用了什么?
如何在我的代码中获取单个表情符号?
编辑:还有...我如何为 XML 转义它?
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class Test008 {
public static void main(String[] args) throws Exception{
BufferedReader in = new BufferedReader(
new InputStreamReader(
new FileInputStream("D:\\DATA\\test1.txt"), "UTF8"));
String s = "";
while ((s = in.readLine()) != null) {
System.out.println(s);
System.out.println(s.length());
System.out.println(s.charAt(0));
System.out.println(s.charAt(1));
System.out.println((int)(s.charAt(0)));
System.out.println((int)(s.charAt(1)));
String z = org.apache.commons.lang.StringEscapeUtils.escapeXml(s);
String z3 = org.apache.commons.lang3.StringEscapeUtils.escapeXml(s);
System.out.println("======================================");
System.out.println(z);
System.out.println(z.length());
System.out.println(z.charAt(0));
System.out.println("======================================");
System.out.println(z3);
System.out.println(z3.length());
System.out.println(z3.charAt(0));
System.out.println("======================================");
}
in.close();
}
}
【问题讨论】:
-
不应该将字符集称为
"UTF-8"而不是"UTF8"? -
@f1sh 我认为两者都可以,但会尝试一下......是的......同样的事情。
-
请注意,您根本不需要在 XML 中转义这些字符,您可以按原样编写它们,前提是您使用正确的编码并且接收方正确处理 XML .您必须转义的唯一字符是 XML 本身的语法使用的字符(甚至那些并非总是如此,例如
<不需要在属性值中转义,但&必须转义)。 -
@JoachimSauer 谢谢...是的,似乎这就是来自 Apache commons lang 3.11 的
StringEscapeUtils.escapeXml10所做的。它根本无法逃脱它。我想我现在让它工作了。非常感谢!
标签: java unicode encoding java-8