1. 2011. 2. 24. 00:34 IDE & SDK/Lazarus
라자루스 문자열 사용시 ANSI Character 코드를 쓰면 비교가 안되는점이 있습니다.
물론 'c' 처럼 쓰면 되겠지만요..

 그렇기때문에 라자루스를 사용한다면 UTF8String 으로 선언하여 문자열을 사용 하여야 합니다.


var
  UTF8: UTF8String;
  UTF16: WideString;//UCS2S
  AnsiStr: AnsiString;
  UCS4: UCS4String;    

라자루스 문자열 출력방법 ( String <-> WideString 자동 변환 델파이와 동일 )
자동 변환시 문자열은 String 혹은 WideString 이 아닐시 전혀 다른 문자열로 변환 됩니다. [ 디코드시에 복원 가능 ]
UTF8:='라자루스';
UTF16:=UTF8Decode('라자루스');
AnsiStr:=UTF8Decode('라자루스'); 
UCS4:=WideStringToUCS4String(UTF8Decode('라자루스')); 

"라자루스" 출력 HEX Dump
ANSI : B6 F3 C0 DA B7 E7 BD BA
UTF8 : [ EF BB BF ] EB 9D BC EC 9E 90 EB A3 A8 EC 8A A4
UTF16-LE : [ FF FE ] 7C B7 90 C7 E8 B8 A4 C2
UTF16-BE : [ FE FF ] B7 7C C7 90 B8 E8 C2 A4
UCS4 : 7C B7 00 00 90 C7 00 00 E8 B8 00 00 A4 C2 00 00 00 00 00 00

덤프코드를 직접 코딩 할때 아래 코드를 사용 합니다.
var ms:TMemoryStream;

ms:=TMemoryStream.Create();
if Assigned(ms) then begin   
  UTF8:='라자루스';
  ms.write(UTF8FileHeader,SizeOf(UTF8FileHeader));
  ms.Write(UTF8[1],Length(UTF8));
  ms.SaveToFile('UTF8.txt');
  ms.Cleear;

  UTF16:=UTF8Decode('라자루스');
  ms.write(#$FF#$FE,2);
  ms.Write(UTF16[1],Length(UTF16)*2);
  ms.SaveToFile('UTF16.txt');
  ms.Clear;

  AnsiStr:=UTF8Decode('라자루스');
  ms.Write(AnsiStr[1],Length(AnsiStr));
  ms.SaveToFile('ANSI.txt');
  ms.Clear;

  UCS4:=WideStringToUCS4String(UTF8Decode('라자루스'));
  ms.Write(UCS4[0],Length(UCS4)*4);
  ms.SaveToFile('UCS4.txt');
  ms.Clear; 
  ms.Free;
end
Posted by Nightly Luna
,
® © Tanny Tales
/ rss