2012-01-04 4 views
0

일련의 string.replaceAlls를 사용하여 ASCII 문자 & HTML 인코딩을 사용하여 모든 UTF-8 특수 문자를 스왑하려고합니다. 그 길을 따라 나는 특히 고집 센 한 명을 쳤다 : UAC-8, UTF-8 middot. .이 라인에 걸림돌 전에 확장 된 ASCII 나타납니다, 나는 ';string.replaceAll 절단 문자 시간의 50 %

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

("¬ï"는이 UTF-8 & middot의 방법입니다 : 여기

는 시간을 반으로 문자를 잘라 줄입니다 d는 "\ uAC8B"및 다른 많은 인코딩을 성공하지 못했습니다.)

줄은 UTF-8 중음부를 잘라 내고, 대체하지 않으며, 절반 만 수행합니다. 나머지 절반은 캐릭터를 놓치지 않고 그대로 남겨 둡니다. 여러 사본을 만들거나 그 주위에 다른 줄을 옮기는 경우에도 그렇게하지 않습니다.

멀티 스레딩 문제인 것처럼 느껴지 나 멀티 스레딩이 진행되는 것을 알지 못합니다. 다른 .jsp에서 실행되는 포함 된 .jsp 파일의 replaceAlls 블록.

무엇이이 경쟁 조건과 같은 동작을 유발할 수 있습니까?

답변

4

AC8B는 점이 아니며 한자입니다. 00B7을 의미 했습니까?

Java 문자열은 항상 UTF-16 유니 코드입니다. UTF-8은 파일에서 유니 코드 문자를 나타내는 방식으로, Java 문자열이 메모리에 저장되는 방식이 아닙니다.

입력을 읽고 출력 파일을 쓰는 데 사용되는 인코딩에주의하십시오. 파일은 UTF-8이어야하지만 일단 파일 내용이 Java 문자열로 읽혀지면 더 이상 UTF-8이 아닙니다. 그러나 16 비트 유니 코드.

UTF-8 원시 바이트를 ASCII로 나타내지 않고 올바른 유니 코드 이스케이프를 사용하고 있다고 생각합니다.

+0

단일 스레드 코드에서 동작과 같은 경쟁 조건이 발생하는 이유를 알지 못했지만 올바른 인코딩을 얻으면이를 수정했습니다. 내가 파일에서 벗어나고있는 말다툼을 잘못 해석했다는 사실을 지적했을 때, 내가 돌아가서 내가 돌아 오는 것에 대해 생각하고있는 몇 가지 가정을 확인하게되었습니다. 감사. – baudot

+0

쿨! 도움이 된 것을 기쁘게 생각합니다. – theglauber

관련 문제