2012-02-24 5 views
0

다음 문자열이 데이터베이스에 저장되어 있습니다 (Unicode 형식).수치 엔티티를 읽을 수있는 형식으로 변환

كنت قد دخلت بالفعل في مكان آخر من 

이제 해당 문자열을 읽을 수있는 형식으로 변환하고 싶습니다. Java에서는 어떻게 할 수 있습니까?

+2

이것은 유니 코드 형식이 아니며 XML/HTML 문자 참조입니다. . 리터럴 문자가 필요한 데이터베이스에서이 값을 갖는 것은 큰 데이터 품질의 냄새입니다. Andrzej의 설명에 따라 이스케이프 처리를 해제하여 읽을 수 있지만 장기적으로이 데이터를 처음부터 수정해야합니다. 제출 된 양식 데이터의 HTML 문자 참조는 양식 페이지를 UTF-8로 제공하지 않은 경우가 많습니다. – bobince

+1

해당 문자열을 해당 언어로만 원합니다 (예 : 그 문자열이 urdu에 있다면 그것은 단지 unicode 문자가 아닌 urdu 만 표시해야합니다. –

+0

? 우르두어는 유니 코드 문자입니다. '& #'...';'는 HTML 문자 참조 이스케이프입니다. 그것은 유니 코드와 아무런 관련이 없습니다. – bobince

답변

4

이들은 HTML 엔터티이기 때문에이를 표현하는 문자로 변환 할 수있는 일종의 라이브러리 메소드가 필요합니다.

아파치 커먼즈에는 예를 들어 StringEscapeUtils.unescapeHtml이 있으며 많은 사람들이 있습니다.

당신이 정말로 뭔가를 자신의 롤이 특정 경우에 당신이 &#; 사이의 숫자를 tokenise 수있는 육각 INT로 구문 분석 및 Java 문자로 변환하는 Character.toChars를 호출합니다

. 라이브러리를 사용하는 것보다 많은 작업이 필요하고 버그가 더 많이 포함될 것입니다.

중 하나는 결과를 제공한다

ᘃᘆᕸ ᘂᖃ ᖃᖂᘄᕸ ᕶᕵᘄᘁᖓᘄ ᘁᘐ ᘅᘃᕵᘆ ᕰᖂᖅ ᘅᘆ

은 (그건 그렇고, 난 당신이 '읽을 수있는 형식'가 무엇을 의미하는지에 대해 더 구체적으로해야한다고 생각 . 할 수 있습니다. 문자열을 참조하십시오. 엔티티 참조 시퀀스입니다. 개발자는 정확합니다.)

+0

Readable은 문자열이 프랑스어 또는 우르두어 인 경우 유니 코드가 아닌 해당 문자열 만 표시해야 함을 의미합니다. –

+3

@BhavikAmbani 나는 당신이 Andrzej에 대해 오해했다고 생각합니다. 그는 실제로 당신의 문제를 해결했습니다. 페이지를 작성하는 동안 각 문자에 대해 unescapeHtml 함수를 호출해야합니다. 그런 다음 자동으로 올바른 문자 집합을 사용합니다. – egrunin

+0

@Bhavik -하지만 ** 문자열은 ** 프랑스 또는 우르두어로 표시되지 않으며 US-ASCII로되어 있으며 HTML 엔터티 참조 문자열입니다. :) 이러한 참조를 해결하여 일련의 규칙을 기반으로 문자열을 차이로 변환하려고합니다. 어떤 것이 맞는지는 확실하지만, "읽을 수있게 만드는 것"보다는 "엔터티 심판을 해결하는 것"으로 언급하는 것이 훨씬 명확합니다. 어쨌든, 이것은 모두 약간의 문제가 있습니다 - 문제를 해결하기 위해 문자열을 이스케이프 처리하지 않기위한 적절한 메소드를 호출해야합니다. –

관련 문제