2010-07-06 2 views
2

문제는 두 단계로 분류 통로 MS-97 마이그레이션 : UTF-8 인코딩 된유니 코드 Woes! MS-Access 2007에서

문제점 단계 1. 액세스 97dB 함유 XML 스트링.

이 문제는 다음과 같이 요약됩니다. Access 97 db에는 UTF-8로 인코딩 된 XML 문자열이 들어 있습니다. 그래서 UTF-8에서 유니 코드로 XML 문자열을 별도로 변환하기위한 패치 도구를 만들었습니다. UTF8 문자열을 유니 코드로 변환하기 위해 함수를 사용했습니다. MultiByteToWideChar (CP_UTF8, 0, PChar (OriginalName), -1, @newName, Size);. (여기서 newName은 "newName : WideChar의 배열 [0..2048],"으로 선언 된 배열입니다.

이 함수는 대부분의 경우 잘 작동하며, Spainsh, Arabic, 문자로 검사했습니다. 하지만 나는 질식하고있는 그리스 문자와 중국 문자에 대해 연구하고있다. 같은 일부 그리스어 문자를 들면

"나는 • I ... γ. ISI ± II ± βιά"(액세스-97에 저장된 )는 결과 새 문자열 사이에 널 부르는 것들은를 포함하고 때를에 저장 wide-string 문자가 잘 리게됩니다.

" ¢ »Âμ?"(은 Access-97에 저장 됨)와 같은 일부 중국어 문자의 경우 결과는 "? ¢»? μ?"와 같이 완전히 터무니 없습니다.

문제 2 단계 문자열이 응용 프로그램 GUI 유니 코드 입력을 받아, 내가 아랍어와 스페인어 문자로 확인 액세스-97

처음에 저장 액세스 97dB 텍스트, 명시 적으로 문자가 필요하지 않습니다 부호화하는 것을 다음 보인다 . 그러나 다시 문제는 그리스 문자와 chineese 문자가 함께 제공됩니다.

나는 텍스트 변환을 위해 위에서 언급 한 동일한 기능을 시도했다 (올바른가?), 그 결과는 다시 붕괴되었다. 아웃 변환으로 괜찮은 Spainsh 문자는 유니 코드 문자가 손실되거나 일반 Ascii Alphabets으로 변환됩니다. 1.

나를 인도 해주십시오 단계에서 mentined으로 그리스와 Chineese 문자

비슷한 동작을 보여줍니다. 올바른 접근 방식을 취하고 있습니까? 주위에 다른 방법이 있습니까 ??? 글쎄 지금은 혼란스럽고 질문이 가득합니다.

+0

어떤 델파이 버전입니까? Delphi 2009부터 Unicode에 대한 지원이 많이 바뀌 었습니다. – mjn

+0

델파이 2006 – Nains

+0

'UTF-8에서 유니 코드로 변환'할 방법이 없습니다. 유니 코드는 문자 인코딩이 아닙니다 :) Access 2007로 변환하려면 주어진 데이터베이스 테이블에서 사용하는 charcter 인코딩을 알아야합니다 (예 : UTF -16 (WideChar와 동일하지 않음) – mjn

답변

3

그리스어 문자 작업에 대한 특별한 요구 사항은 없습니다. 진짜 문제는 문자가 Access에서 인식하지 못하는 인코딩에 저장되어 있다는 것입니다. 응용 프로그램이 데이터베이스에 UTF8 값을 저장하면 모든 단일 바이트를 데이터베이스의 코드 페이지에있는 동등한 바이트로 변환하려고했습니다. 해당 인코딩에서 아무런 일치도없는 모든 문자가 대체 되었습니까? 중국 텍스트는 사라질 수 있지만 그리스 텍스트는 괜찮습니다.

데이터를 읽을 수있는 것으로 변환하려면 저장되어있는 코드 페이지를 알아야합니다.이 코드를 사용하면 실제 바이트를 가져 와서 유니 코드로 변환 할 수 있습니다.

+0

사실, 응용 프로그램은 실제로 코드 페이지를 사용합니다. 즉, 사용자가 특정 언어를 선택하자 마자 해당 페이지 코드를 사용하여 인코딩합니다. 문제는 Access-97에 저장됩니다. 이 인코딩 정보를 저장하는 동안 저장되거나 손실되는 것은 확실하지 않습니다. – Nains

+1

데이터베이스에 사용 된 코드 페이지를 언급했습니다. 동일한 필드에 다른 인코딩을 사용하는 문자열을 응용 프로그램에 저장하지 않는다면 말입니다. 그리스 문자에 어떤 코드 페이지를 사용하고 있습니까? –

+0

글쎄, 응용 프로그램은 Win 코드 페이지 1253을 사용하여 Access 97의 그리스 문자를 앞뒤로 해석합니다. 데이터베이스가 참조하는 코드 페이지를 찾을 것을 제안합니다. 좋아, 내가 UR 포인트, 이것 좀 더 찾고 .... 고마워. – Nains