文字コードの変換

解決


KS  2006-09-27 12:25:24  No: 23391  IP: 192.*.*.*

Shift-JIS形式の文字列ををISO-8859-1に変換したいのですが、どのようにしたら出来るのでしょうか?
よろしくお願いします。

編集 削除
もにゃ  2006-09-27 14:49:14  No: 23392  IP: 192.*.*.*

文字コードを直接入れてあげればふつーにでますよ。(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;

編集 削除
KS  2006-09-29 01:05:57  No: 23393  IP: 192.*.*.*

もにゃさん返事ありがとう御座います。

わざわざソースまで書いていただいのに理解できませんでした…。
『文字コードを直接入れてあげればふつーにでますよ。(WinXP)』
とのことですが、その文字コードを入れている部分というのは、
どの部分でしょうか?

編集 削除
もにゃ  2006-09-29 10:43:09  No: 23394  IP: 192.*.*.*

説明不足でしたか…
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);

編集 削除
KS  2006-09-29 17:02:59  No: 23395  IP: 192.*.*.*

もにゃさんわざわざ丁寧な説明ありがとうございます。
お陰様でようやく理解することが出来ました。
これからも宜しくお願いします。

編集 削除
KS  2006-09-29 17:03:33  No: 23396  IP: 192.*.*.*

解決忘れてました。

編集 削除