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));の部分でエラーになります。
簡単にできるかと思ったらそうでも無かった
サンプル?はおそらく「終了」って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;
ン
普通のテキストに交じってヲサ」コードヲサなんて形で文字が埋め込まれてるのは
トのョファイルを思わせますね……
本当にファイル形式だったりして。(そうだとしたら、なんでそんなものをログファイルの出力形式にしてるのか謎ですが)
もしファイル形式だとしたら、ヤミクラスを使って解析することができます。使用例はこちらのページの最後あたりを参考に。
ナテラでヤフを取得するには?
コッッョョョッュットツツモッョソォイーアウアーッアウアーーーーケョ
これでヲサ」なんたらかんたらヲサの部分がデコードされて、普通のユ文字列が得られます。
で、普通のユ文字列からモハノモにするには、妙な関数かまさなくても単純にチモにキャストすればいいですね。
スススススススススススススススススススススススススススススススススススススススス
ニコ ちゃん
トコ イーアカッーイッイケィ月ゥ ーケコウオコオエ シ スュアセシ中級者セ シッニセシノヘヌ ス「コッッョョョッッイョ「 ス「ー「セ 書込者ノト:ロ 」。 。 ン
モコ
さんの回答で無事変換することが出来ました。さん含め、ありがとうございました。
トニヘを解析することも出来るんですね。今度挑戦してみます。
ツイート | ![]() |