2011-02-16 4 views
2

"* org.apache.commons.lang.StringEscapeUtils.unescapeHtml (myHtmlString)"을 사용하여 Html 엔티티 이스케이프를 실제 문자열을 포함하는 문자열로 변환합니다 이스케이프에 해당하는 유니 코드 문자입니다. 그러나 "em 대시"및 "en 대시"기호를 올바르게 구문 분석하지 않습니다. 올바른 자리 바꾸기가 "\ u2013"인 동안 StringEscapeUtils는 "–"을 "\ u0096"으로 바꿉니다. 그리고 "\ u0096"은 "–"에 해당하는 cp1252입니다. 어떻게하면 제대로 작동 할 수 있습니까? 나는 그것을 수동으로 대체 할 수 있지만 StringEscapeUtils 또는 다른 유틸리티를 사용하여 그것을 할 수 있는지 궁금해."org.apache.commons.lang.StringEscapeUtils"및 "en dash"

+0

정확히 무엇을하려고합니까? 'StringEscapeUtils'의 어떤 메소드를 호출합니까? – axtavt

답변

1
And as I have read "\u0096" is cp1252 equivalent for "–". 

저는 그렇게 생각하지 않습니다. 유니 코드 0x0096은 C1 제어 코드 :

http://en.wikipedia.org/wiki/C0_and_C1_control_codes

와의 교체 수 없을 수도 있습니다 - (당신이 쓴대로) "".

음, StringEscapeUtils 정말이를 망쳐 놨 경우 (대시 참 u2013을 \해야 엉)과 그것의 경우는 단지 그것을 어지럽히 탈출 한 다음 문자열의 다른 0x0096을 할 이유하는 존재하지 않는 경우 바꾸어주세요 이후 StringEscapeUtils을 호출해야합니다.

다음은 당신이 기대하는 대체 않습니다

System.out.println("Broken\u0096stuff".replaceAll("\u0096", "\u2013")); 

그러나 먼저 정말 일을 망쳐 놨 정말, 정말, 당신이 얼마나 이유/이해해야 그 StringEscapeUtils을해야 자바 문자열에서 0x0096 그 .

또한 Unicode 3.1이 나올 때까지 Java가 생각 되었기 때문에 슬프게도 Java의 Unicode 지원은 주요 SNAFU라는 것을 지적해야합니다.

는 그러므로 그것이
프리미티브 숯 16 비트를 사용하는 스마트 아이디어를 보였다는 4 hexdigits을 사용하는 스마트 아이디어 듯 '\ Uxxxx에'제어 시퀀스는, 상기의 길이를 표현하기 위해 스마트 아이디어 듯 문자는 [] 등 문자열의 길이() 메소드

에서 이러한 사실은 어디 문자 실제로 더 이상 유니 코드 문자를 보유 할 수없는 원시 어디 문자열의 주요 자바 혼란으로 중 하나에 연결된 모든 아주 아주 바보 같은 생각이었다 길이 메서드는 실제로 이 아니며은 문자열의 실제 길이를 반환합니다.

나는 다음과 같은 :

final char brokenCharCannotRepresentUnicode31Codepoints = '\uFFFF'; // How do I store a Unicode 3.1 codepoint here!? 

왜 호언 장담? 글쎄, 난 모르기 때문에 어떻게에서 정규 표현식 교체 문자열의 완전히 대체하기는 구현하지만 난 정말는 문자와 같은 문자열의 완전히 대체하기했다 경우 ( 특정 코드 포인트)이 있다면 놀라지 않을 것 과 같은 길이과 같은 \ uxxxx, 음 .. 완전히 흠.

1

StringEscapeUtils.unescapeHtml(...) 호출에 문제가 있다고 생각됩니다.

대신 전화가 전에 '\u0096'으로 변경된 것으로 의심됩니다. 더 구체적으로 말하자면, HTML을 문자로 읽을 때 코드가 잘못된 문자 세트를 사용했다고 의심됩니다.

당신이 말했듯이, en 대시는 cp1252에서 코드 포인트 0x96입니다. 따라서 유니 코드 코드 포인트 \u0096에 일괄 적으로 잘못 번역 된 한 가지 방법은 cp1252를 사용하여 인코딩 된 바이트 스트림으로 시작하고 InputStreamReader(is, "Latin-1")을 사용하여 읽기/디코딩하는 것입니다.

관련 문제