簡體   English   中英

string.replace 50%的時間中所有剪切字符

[英]string.replaceAll cutting characters 50% of the time

我正在嘗試使用一系列string.replaceAlls來以ASCII和HTML編碼交換文本文件中的所有UTF-8特殊字符。 一路走來,我遇到了一個特別頑固的人:\\ uAC8B,UTF-8中間點。

這是截斷字符的那一行,一半的時間:

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

(“¬ï”是UTF-8·作為擴展ASCII出現的方式。在絆到這行之前,我嘗試過“ \\ uAC8B”和許多其他編碼,但均未成功。)

該行剪切出了UTF-8中間點,它沒有替代它,並且只完成了一半的時間。 另一半時間它錯過了角色,並且保持不變。 如果我對其進行多份復制或在其周圍移動其他線條,它甚至都不會這樣做。

這感覺像是一個多線程問題,但是我不知道正在發生任何多線程問題。 從另一個.jsp運行的包含的.jsp文件中,只有replaceAlls的一部分。

是什么會導致這種種族條件(例如行為)?

AC8B不是點,而是漢字。 您是說00B7嗎?

Java字符串始終為UTF-16 Unicode。 UTF-8是表示文件中Unicode字符的一種方式,而不是Java字符串存儲在內存中的方式。

請注意用於讀取輸入和寫入輸出文件的編碼,它們應為UTF-8,但是一旦將文件內容讀入Java字符串,它將不再是UTF-8,而是16位Unicode格式。

我認為您最好的機會是使用正確的Unicode轉義,而不是嘗試將UTF-8原始字節表示為ASCII。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM