2011-10-23 4 views
1

SQLite3을 사용하여 데이터베이스에서 읽고 쓰는 작은 응용 프로그램을 구현했습니다. 데이터베이스에 추가해야하는 일부 레코드는 아랍어 텍스트이며 데이터베이스에 저장 될 때 읽을 수없고 이해할 수없는 텍스트로 변환됩니다.SQLite3에서 읽을 수없는 텍스트를 저장합니다.

  • sqlite3_open
  • sqlite3_prepare
  • sqlite3_bind_text
  • sqlite3_step

내가 문제를 해결하기 위해 무엇을 할 수 있는가 : 나는 쓰기 & 읽기 이러한 API를 사용?

+0

메모리에있는 텍스트의 인코딩은 무엇입니까? – millimoose

답변

1

텍스트가 비 ASCII 인코딩 인 것 같습니다. 예를 들어, 유니 코드입니다.

ASCII 테이블에는 0에서 127까지의 정수로 표시된 문자 만 있기 때문에 이것은 아랍어 문자를 나타내는 데 사용할 수있는 것이 없습니다. (0750-077F, 48 자)

  • 아랍어 프레젠테이션 양식-A

    • 아랍어 (0600-06FF, 224 자)
    • 아랍어 보충 : 예를 들어, 유니 코드는 아랍어를 대표하는 다섯 개 가지 범위를 사용하고 있습니다 (FB50-FDFF 608 개 문자)
    • 아랍어 표현 형식-B (FE70-FEFF 140 개 문자)
    • 루미 숫자 기호 (10E60-10E7F 31 자)

    8 비트 값 (char 유형, 길이가 1 바이트)이 허용하는 글자/문자가 더 많을 수 있기 때문에 와이드 문자가 일부 또는 전체 글자를 나타내는 데 사용됩니다.

    결과적으로 문자로 된 문자열의 길이는 바이트 단위의 문자열 길이와 다릅니다. 제 가정은 sqlite3_bind_text 함수를 사용할 때 네 번째 매개 변수로 많은 문자를 전달하는 반면 바이트 수 여야한다는 것입니다. 또는 데이터베이스에서 문자열을 읽을 때이 길이를 잘못 해석 할 수 있습니다. sqlite3_bind_text 문서는 네 번째 매개 변수에 대해 이런 말을한다 : 네 번째 인수가 그 루틴에서

    는, 그 값은 매개 변수의 바이트 수 입니다. 명확히하기 위해 : 값은 문자 수가 아닌 값에 바이트의 수입니다. 네 번째 매개 변수가 음수이면 문자열 길이는 첫 번째 0 종결 자까지의 바이트 수인 입니다.

    올바른 것을해야합니다.

    은 참조 :

    행운을 빕니다!

  • +0

    유니 코드가 인코딩이 아닙니다. 유니 코드는 일반적으로 UTF-8 또는 UTF-16으로 인코딩됩니다 (후자는 주로 Windows에서 사용됩니다). –

    관련 문제