2010-12-28 6 views
2

나는 문자의 신비한 문자열을 함께 조각하려고 노력하고 있습니까 ?? 우리 데이터베이스에서 꽤 많이 보았습니다. 이것은 문자 인코딩 간의 변환 결과이지만, 완전히 긍정적이지는 않습니다.문자 인코딩 : â?

사용자는 Ext-Js 서식있는 텍스트 편집기에 텍스트를 입력하거나 잘라내어 붙여 넣을 수 있습니다. 데이터는 ... 데이터베이스에 계속, 나는 데이터베이스에서 볼 때 내가 그 이상한 문자를 참조하십시오 severlet에 게시

  1. 원래의 의미로 다시 이것들을 디코딩 할 수있는 방법이

    , 올바른 인코딩을 발견 할 수 있었거나 변환 프로세스를 통해 발생 된 비트 또는 바이트의 손실이 있습니까?

  2. 사용자는 여러 버전의 MS Word 및 PDF에서 잘라내어 붙여 넣기를합니다. 인코딩은 사용자가 복사 한 곳을 따라야합니까?


웹 사이트는 UTF-8 우리는 MS에게 SQL Server 2005를 사용하는 이다 주셔서 감사합니다;

SELECT serverproperty ('Collation') - 서버 기본 데이터 정렬. Latin1_General_CI_AS

SELECT DATABASEPROPERTYEX ('XXXX', '정렬') - 데이터베이스 기본 SQL_Latin1_General_CP1_CI_AS 데이터

및 열 다음 NCHAR의

Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation 
text varchar no -1     yes no yes SQL_Latin1_General_CP1_CI_AS 

비 유니 코드 등가물, nvarchar 및 ntext 데이터 형식은 SQL Server 2000의 입니다. 유니 코드 데이터는 명령 스트링을 통해 이러한 유니 코드 데이터 형식 열 하나 삽입되면 (달리 은 "언어 이벤트"라고 함), SQL 서버 형 연관된 코드 페이지를 사용하여 데이터에 데이터 변환 을 컬럼의 정렬과 함께 사용하십시오. 문자를 코드 페이지에 표시 할 수없는 경우 이 손실되었음을 나타내는 물음표 (?)으로 바뀝니다. 예기치 않은 문자 또는 질문이있는 경우 데이터에 이 유니 코드에서 유니 코드가 아닌 유니 코드로 변환되어 이 문자로 손실되었음을 나타냅니다.

그래서 문제의 근본 원인이 될 수 있습니다. 우리가 쉽게 해결할 수있는 문제는 아닙니다.

+0

귀하의 DBMS는 무엇입니까? – bluish

+0

DBMS, DB charset, 웹 사이트 문자셋, 정보 언어 (영어, 프랑스어, 일본어 ...)와 관련된 정보가 누락되었습니다. –

+0

한 번 더 테스트 할 수 있습니다. Microsoft Word에서'- '', "" ""... ‰ <> € ™'를 입력하고 프로세스의 어느 시점에서 오류가 발생했는지 확인하십시오. –

답변

2

이것은 단순히 Word/PDF 문서를 HTML로 순식간에 변환하는 것을 경험 한 것입니다. (windows-1252에서 utf8로 전환 할 가능성이 높습니다.) 그럴 경우 Word 문서의 신비한 문자 중 2/3은 "스마트 인용 부호"이고 나머지 대부분은 다른 "스마트"편집 기능, elipsis, em 대시 , 등등 PDF의 아마 비슷한 기능을 가지고 있습니다.

ExtJS 편집기에 붙여 넣은 후 형식이 정상적으로 보이는 경우 엔 인코딩이 함께 전달됩니다. 텍스트의 사용 결과에 따라 변환 할 필요가 없을 수도 있습니다.

내가 아직 기반을두고 있고 국제화 문제에 대해 이야기하는 것이 아니라면 Word에서 HTML로 변환하는 변환기가 있다고 덧붙일 수는 있지만 작동 방식에 대해서는 자세히 알지 못합니다. 나는 그것을 평가할 때 여러 가지 성공을 거뒀다. "스마트"문자의 원본 소스에 대해 추측 할 필요가 있으므로 이러한 변환기와 관련된 정보 손실/오류가 거의 확실합니다. 필자가 생각하기에 사용자에게 돌아가서 "스마트"기능을 끄는 것이 더 쉬웠다.

0

문자 당 1 바이트를 사용하는 varchar 유형의 열로 charcter 당 2 바이트를 사용하는 유니 코드 데이터가 저장됩니다. char 당 2 바이트를 사용하는 텍스트는 db에 저장 될 때 1 바이트가 손실됩니다.

varchar 열을 nvarchar로 변경하기 만하면됩니다.
그런 다음 코드에서 사용중인 sql 매개 변수를 변경하십시오.

+0

열의 데이터 정렬을 변경해야합니까? – akaphenom

+0

번. 데이터 정렬은 텍스트를 비교하고 정렬하는 방법 만 말합니다. –

0

문제는 확실합니다. 브라우저가 정상적으로 작동하는 경우 웹 페이지의 양식에 입력하거나 붙여 넣을 수있는 모든 유니 코드 문자를 사용할 수 있습니다. 캐릭터가 HTML 캐릭터 셋에 속하고있는 경우, 그대로 송신됩니다. 그렇지 않으면 HTML 엔터티로 변환됩니다. SQL Server는 해당 변환을 수행하고 문자에 상응하는 문자가 없으면 데이터를 자동으로 손상시킵니다.

완벽하게 해결할 수있는 방법은 많지 않지만 해결 방법은 서블릿에서 변환을 수행 할 수있게하는 것입니다. 이 방법은 당신이 그것에 대해 완벽하게 제어 할 수 있습니다. 예를 들어, 가장 일반적인 비 Latin1 문자 사용자 목록을 붙여 넣을 수 있습니다 (똑똑한 따옴표, 유니 코드 공백 ...). 문맥에서 쉽게 식별 할 수 있어야하고 더 나은 것으로 대체해야합니다. ?. 또는이 작업을 수행하는 라이브러리를 사용합니다.

아니면

+0

dan04 님의 답변에 대한 귀하의 의견에 따라 - 위키가 상당히 흥미 롭습니다. http://en.wikipedia.org/wiki/UTF-8 코드 페이지를 매우 간단하게 설명합니다. 당신이 찾고있는 것인지 확실하지 않다 – akaphenom

+0

@akaphenom Wikipedia의 기사는 훌륭한 자료이지만 완전한 문자표를 포함하고 있지 않다. 자주 http://www.utf8-chartable.de/을 사용하지만 유니 코드 코드 포인트로만 검색 할 수 있습니다. –

3

â : 유니 코드로 DB를 전환 할 수는 ISO-8859 및 Windows-1252에 0xE2로 인코딩됩니다. 0xE2는 UTF-8의 3 바이트 시퀀스의 선두 바이트이기도합니다. (특히, 범위 U + 2000 ~ U + 2FFF의 경우 windows-1252 문자 –—‘’‚“”„†‡•…‰‹›€™ 포함).

UTF-8로 인코딩 된 텍스트가 windows-1252로 오인되어 표시되는 것처럼 보입니다. â 다음에 두 개의 출력 할 수없는 문자가 표시됩니다.

+0

두 개의 물음표를 설명 할 것이다 ... 나는 그것이 변환을 수행하는 SQL 서버가되기를 바란다 ... – akaphenom

+0

@ dan04 +1! 나는 같은 연구를했고 결론에 도달하지 못했습니다! Unicode 코드 포인트가 아닌 바이트 시퀀스로 문자를 찾으려면 자원을 권장 할 수 있습니까? –

+1

@akaphenom, SQL Server가 유효한 문자를 사용하고 변환하기 전에 정보의 2/3를 제거하는 것 같습니다. 소스를 UTF-8로 식별하지 않습니다. –