文字コードから文字に変換する(ANSI&UnicodeUTF16)
|
78 |
CharCodeToChar |
動作確認 |
Delphi2007 |
更新日 |
2008/03/03(月) |
文字コードから文字に変換します。
Button1とButton2でMemoに文字コードを出力して
Button3とButton4で文字コードから文字に変換して行に文字を追加しています。
Shift-JISではchr関数を使います。
────────────────────
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin//
Memo1.Lines.Clear;
for i := 1 to Length(Edit1.Text) do
begin
case ByteType(Edit1.Text, i) of
mbSingleByte: begin
Memo1.Lines.Add( IntToHex( Ord( Edit1.Text[i] ), 2) );
end;
mbLeadByte: begin
Memo1.Lines.Add(
IntToHex( Ord( Edit1.Text[i] ), 2)+
IntToHex( Ord( Edit1.Text[i+1] ), 2 ) );
end;
mbTrailByte: begin
end;
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
value, value1, value2: Integer;
s: String;
begin//
for i := 0 to Memo1.Lines.Count-1 do
begin
s := Memo1.Lines[i];
if Length(s)=2 then
begin
if TryStrToInt('$'+s, value) then
begin
Memo1.Lines[i] := Memo1.Lines[i] + ' ' +
Chr(value);
end;
end;
if Length(s)=4 then
begin
if TryStrToInt('$'+Copy(s, 1, 2), value1)
and TryStrToInt('$'+Copy(s, 3, 2), value2) then
begin
Memo1.Lines[i] := Memo1.Lines[i] + ' ' +
Chr(value1)+Chr(value2)
end;
end;
end;
end;
────────────────────
UnicodeUTF-16ではWideCharにキャストすることで変換できます。
────────────────────
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
ws: WideString;
begin//
Memo2.Lines.Clear;
ws := Edit2.Text;
for i := 1 to Length(ws) do
begin
Memo2.Lines.Add(
IntToHex( Word( ws[i] ), 4 ) );
//このように書く事も可能
// Memo2.Lines.Add(
// IntToHex( HiByte( word( ws[i] ) ), 2) +
// IntToHex( LoByte( word( ws[i] ) ), 2) );
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
value, UpByte, DownByte: Integer;
s: String;
wc: WideChar;
begin//
for i := 0 to Memo2.Lines.Count-1 do
begin
s := Memo2.Lines[i];
if Length(s)=4 then
begin
if TryStrToInt('$'+s, value) then
begin
Memo2.Lines[i] := Memo2.Lines[i] + ' ' +
WideChar(value);
end;
//このように書く事も可能
// if TryStrToInt('$'+Copy(s, 1, 2), UpByte)
// and TryStrToInt('$'+Copy(s, 3, 2), DownByte) then
// begin
// Memo2.Lines[i] := Memo2.Lines[i] + ' ' +
// WideChar( (UpByte*$100) + DownByte ) ;
// end;
end;
end;
end;
────────────────────
注意────────────────────
ここで紹介しているUnicodeUTF-16とはUTF-16のBMP部分だけで
サロゲートペアについては配慮していませんので
UCS-2と呼べるようです。
|