0

我正在尝试使用一系列 string.replaceAlls 来交换具有 ASCII 和 HTML 编码的文本文件中的所有 UTF-8 特殊字符。在此过程中,我遇到了一个特别顽固的问题:\uAC8B,UTF-8 中点。

这是一半时间删减角色的那一行:

  string_out = string_out.replaceAll("•", "·");

(“¬ï” 是 UTF-8 · 显示为扩展 ASCII 的方式。在绊倒这一行之前,我尝试了“\uAC8B”和许多其他编码但没有成功。)

该行删除了 UTF-8 中点,它没有替换它,它只做了一半的时间。另一半时间它错过了角色,并保持不变。如果我制作它的多个副本或在它周围移动其他线条,它甚至不会这样做。

这感觉像是一个多线程问题,但我不知道有任何多线程正在发生。只是从另一个 .jsp 运行的包含的 .jsp 文件中的一个 replaceAlls 块。

什么可能导致这种类似竞争条件的行为?

4

1 回答 1

4

AC8B 不是点,是汉字。你是说00B7吗?

Java 字符串始终是 UTF-16 Unicode。UTF-8 是一种在文件中表示 Unicode 字符的方式,它不是 Java 字符串在内存中存储的方式。

注意读取输入和写入输出文件的编码,应该是UTF-8,但是一旦文件内容被读成Java字符串,就不再是UTF-8,而是16位统一码。

我认为你最好的机会是使用正确的 Unicode 转义,而不是试图将 UTF-8 原始字节表示为 ASCII。

于 2012-01-04T19:37:11.800 回答