UnicodeからShift-jisに変換するには


tosちゃん  2016-02-26 22:56:07  No: 48022

TruboDelphi2006を使用しています。
別のシステムがログファイルをテキスト形式でおくってくるのですが、テキストの中身に#32066#20102といように普通の文字でUnicodeが記載されてきます。別のQ&Aで「gfnsWideToUtf7」「gfnsUtf7ToWide」を使用するようなサンプルをみつけたのですがテキストの中身を取り出してgfnsWideToUtf7を使用するとコンパイルエラーになります。
文字コードから通常の文字に変換する方法はないでしょうか?
var
  w_txt  : String;
  ls_Wide: WideString;
  msg    : String;
begin
  w_txt ←にテキストの中身(#32066#20102)を代入
  ls_Wide := WideString(WideChar(w_txt));
  msg     := gfnsWideToUtf7(ls_Wide);
  msg     := PWideChar(gfnsUtf7ToWide(msg));

  msgをダイアログで表示

ls_Wide := WideString(WideChar(w_txt));の部分でエラーになります。


take  2016-02-27 02:10:43  No: 48023

簡単にできるかと思ったらそうでも無かった
サンプル?はおそらく「終了」って2文字のUnicodeを処理しようとしているので
そのテキストを作成して内部を見ると

FF FE 42 7D 86 4E

でした。

FF FE 以外を処理すれば読み取ることができるようです。

不格好な処理になっています。がサンプル

var
  w_txt  : String;
  ls_Wide: WideString;
  msg    : String;
  i,d : Integer;
  s :string;
  t : TStringList;
begin
  t := TStringList.Create;
  t.LoadFromFile('unicode.txt');
  s := t.Strings[0];

  w_txt := '';
  ls_Wide := '';
  for i := 0 to (Length(s)-3) div 2 do
  begin
    d := Ord(s[i*2+3]) + (Ord(s[i*2+4]) shl 8);
    w_txt := w_txt + WideChar(d);
    ls_Wide := ls_Wide + WideChar(d);
  end;


tor  2016-02-27 03:35:02  No: 48024

普通のテキストに交じってヲサ」コードヲサなんて形で文字が埋め込まれてるのは
トのョファイルを思わせますね……
本当にファイル形式だったりして。(そうだとしたら、なんでそんなものをログファイルの出力形式にしてるのか謎ですが)

もしファイル形式だとしたら、ヤミクラスを使って解析することができます。使用例はこちらのページの最後あたりを参考に。
ナテラでヤフを取得するには?
コッッョョョッュットツツモッョソォイーアウアーッアウアーーーーケョ

これでヲサ」なんたらかんたらヲサの部分がデコードされて、普通のユ文字列が得られます。
で、普通のユ文字列からモハノモにするには、妙な関数かまさなくても単純にチモにキャストすればいいですね。
スススススススススススススススススススススススススススススススススススススススス
ニコ ちゃん
トコ イーアカッーイッイケィ月ゥ ーケコウオコオエ シ  スュアセシ中級者セ シッニセシノヘヌ ス「コッッョョョッッイョ「 ス「ー「セ 書込者ノト:ロ 」。 。 ン
モコ 

さんの回答で無事変換することが出来ました。さん含め、ありがとうございました。
トニヘを解析することも出来るんですね。今度挑戦してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加