변수를 widestring
변수에 저장해야합니다. 하지만 내 텍스트는 UTF8이고 widestring은 UTF8을 지원하지 않으며 일부 중국어 문자로 변환합니다.WIDESTRING의 UTF8 버전
그래서 WIDESTRING의 UTF8 버전이 있습니까?
난 항상 UTF8string
를 사용하지만이 경우에 나는 당신이 WideString
변수에 UTF8String
변수를 할당 할 때 WideString
변수를 widestring
변수에 저장해야합니다. 하지만 내 텍스트는 UTF8이고 widestring은 UTF8을 지원하지 않으며 일부 중국어 문자로 변환합니다.WIDESTRING의 UTF8 버전
그래서 WIDESTRING의 UTF8 버전이 있습니까?
난 항상 UTF8string
를 사용하지만이 경우에 나는 당신이 WideString
변수에 UTF8String
변수를 할당 할 때 WideString
을 사용해야합니다, 컴파일러는 자동으로 (델파이 2009 이상에서) 문자열을 디코딩하는 지침을 삽입합니다. 그것은 WideString
이 가지고있는 UTF-8을 UTF-16으로 덮고 있습니다. WideString
변수에 중국어 문자가 들어 있으면 UTF-8로 인코딩 된 문자열에 UTF-8로 인코딩 된 중국어 문자가 들어 있기 때문입니다.
var
ws: WideString;
i: Integer;
c: AnsiChar;
SetLength(ws, Length(s));
for i := 1 to Length(s) do begin
c := s[i];
ws[i] := WideChar(Ord(c));
end;
경우 :
당신은 당신이 어떤 종류의 캐스팅으로 자동 변환을 바이 패스 할 수 있습니다, 당신의 UTF8String
s
에서 바이트의 16 비트 버전을 유지하기 위해 문자열 ws
을 원하는 경우 델파이 2009 또는 이후 버전 (XE 시리즈 포함)을 사용하고 있다면 WideString
대신 UnicodeString
을 사용해야합니다. 전자는 원시 델파이 형식 인 반면 후자는 Windows BSTR
형식의 래퍼입니다. 두 유형 모두 UTF8String
과 같은 AnsiString
파생물에 할당 할 때 자동 변환 동작을 나타냅니다. 따라서 사용 유형을 입력하면이 답변에 영향을 미치지 않습니다.
Utf8Decode
:
'UTF8Decode'를 호출 하시겠습니까? . –
하나의 버전 태그, 사용중인 버전을 사용하십시오. 유니 코드 델파이를 사용하고있는 것 같습니다. WideString을 사용하는 이유는 무엇입니까? 나는 당신이 그 주제에 관해 읽을 필요가 있다고 생각합니다. Marco의 백서부터 시작하십시오. –
UTF-8은 ** 8 ** 비트 폭이므로 ** 16 ** 비트 'WideString'에 저장하면 불필요한 과도한 작업이됩니다. – OnTheFly