worddocument.range.words.item(1).text
이게 WideString을 리턴하지 않는 듯 합니다.
일반 AnsiString 을 WideString로 변환하려면 아래 함수를 사용해보세요.
function StringToWideString(const s: AnsiString; codePage: Word): WideString;
var
l: integer;
begin
if s = ' then
Result := '
else
begin
l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, nil, 0);
SetLength(Result, l - 1);
if l > 1 then
MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
- 1, PWideChar(@Result[1]), l - 1);
end;
end;
푸른꿈 님이 쓰신 글 :
: 질문을 구체적으로 하지못하여 죄송합니다.
: 지금 sqlite에 다국어자료를 입출력하는 부분을 코딩하고 있는데 다음과 같은 방식으로 시험했을 때 한글이 깨졌습니다.
:
: word문서
: Friend
: 친구
: 朋友
:
: wrd : widestring;
: querystr : widestring;
: ...
: // sqlite가 utf8, utf16만을 지원하기 때문에 utf8로 변환합니다.
: wrd := utf8encode(worddocument.range.words.item(1).text);
: querystr:='insert into list values(' + '''' + wrd + ''''+ ');' ;
: sqlite3_exec(db, querystr, nil, nil, errmsg);
:
: 출력할 때는 callback함수에서 utf8decode함수를 리용했습니다.
: 출력결과는
: Friend
:
: ??
: 로 한글과 중문이 다 깨집니다.
: tnt를 쓰는 경우 tnt가 unicode문자렬을 돌려주므로
:
: wrd := utf8encode(editTnt.text);
: querystr:='insert into list values(' + '''' + wrd + ''''+ ');' ;
: sqlite3_exec(db, querystr, nil, nil, errmsg);
:
: 로 입출력하면 한글이 정확히 표시됩니다.
: 제가 알고싶은것은 우의 경우와 같이 tnt를 거치지않고 자료가 들어오는 경우 처리방법입니다.
: 초보인지라 너무 무리한 질문을 드려 죄송합니다.
|