Shift-JIS形式の文字列ををISO-8859-1に変換したいのですが、どのようにしたら出来るのでしょうか?
よろしくお願いします。
文字コードを直接入れてあげればふつーにでますよ。(WinXP)
ANSI,UNICODEで確認しました。
procedure TForm1.Button1Click(Sender: TObject);
var
i,q,r:Integer;
rect:TRect;
//wc:WideString;
wc:String;
begin
ClientHeight:=400;
ClientWidth :=400;
q:=0;
r:=0;
for i:=0 to 255 do
begin
q:=q+20;
if q >= 20*16 then
begin
q:=0;
r:=r + 20;
end;
//wc:=WideChar(i);
wc:=Char(i);
rect.Top:=r;
rect.Left:=q;
rect.Bottom:=r+15;
rect.Right:=q + 15;
//DrawTextW(Canvas.Handle,PWideChar(wc),-1,rect,DT_LEFT);
DrawTextA(Canvas.Handle,PChar(wc),-1,rect,DT_LEFT);
end;
end;
もにゃさん返事ありがとう御座います。
わざわざソースまで書いていただいのに理解できませんでした…。
『文字コードを直接入れてあげればふつーにでますよ。(WinXP)』
とのことですが、その文字コードを入れている部分というのは、
どの部分でしょうか?
説明不足でしたか…
ISO-8859-1とShift-JISのネタだったので、
半角カタカナ→オムラウト英字と勝手に判断しました。
あと時代の流れで勝手にWinXp,2Kと判断しています。
Win2k,Xpでは内部でUNICODEが使われているため半角カタカナとオムラウト英字の文字コードは重複していません。なので英数部分の文字列はUNICODE=ISO-8859-1です。
Shift-JISの場合オムラウト英字の文字コード部に半角カタカナが割り当てられています。
また、オムラウト英字は割り当てがありません。また、ISO-8859-1には半角カタカナ、全角文字は割り当てが無いので
Shift-JIS->ISO-8859-1というのはShift-JIS=ISO-8859-1ということになります。
つまり、本当のところ変換作業自体不要です。
でもあえて質問するということは、半角カタカナ→オムラウト英字ではないのかと判断しました。
ですが、Win2k,Xpでは半角カタカナの文字コードの方が別コードになったので、Shift-JISの半角カタカナの文字コードはそのままオムラウト英字になります。
ただし、日本語環境においてTLabel等では自動的にUNICODE→Shift-JIS変換が発生しますのでオムラウト英字は表示できません。表示したい場合はUNICODE→Shift-JIS変換が生じないコントロールを使用しなくてはなりません。(UNICODEコントロールの事)
で「文字コードを入れている部分」は
wc:=Char(i);
もにゃさんわざわざ丁寧な説明ありがとうございます。
お陰様でようやく理解することが出来ました。
これからも宜しくお願いします。
解決忘れてました。
編集 削除