我正在尝试使用一系列string.replaceAlls来交换文本文件中的所有UTF-8特殊字符与ASCII& HTML编码。一路走来,我遇到了一个特别顽固的人:\ uAC8B,UTF-8 middot。
这是在一半的时间内切断角色的线条:
string_out = string_out.replaceAll("¬ï", "·");
(“¬ï”是UTF-8·如何作为扩展ASCII出现。在绊倒这一行之前,我尝试了“\ uAC8B”和许多其他编码但没有成功。)
这条线切断了UTF-8 middot,它没有取代它,它只有一半的时间。另一半时间它错过了角色,并保持不变。如果我制作它的多个副本或移动它周围的其他线,它甚至不会这样做。
这感觉就像一个多线程问题,但我不知道有多线程在进行。只是一个包含.jsp文件中的replaceAlls块从另一个.jsp。
运行什么可能导致这种竞争条件如行为?
答案 0 :(得分:4)
AC8B不是一个圆点,它是一个汉字。你的意思是00B7吗?
Java字符串始终是UTF-16 Unicode。 UTF-8是一种在文件中表示Unicode字符的方式,它不是Java字符串存储在内存中的方式。
注意用于读取输入和编写输出文件的编码,它们应该是UTF-8,但是一旦将文件内容读入Java字符串,它就不再是UTF-8了,但是16位Unicode。
我认为你最好的机会是使用正确的Unicode转义,而不是试图将UTF-8原始字节表示为ASCII。