喫茶XRAYトップページ

[スレッド全体
]

[3094] 文字コードの検出返信 削除
2010/2/16 (火) 16:07:12 Mr.XRAY
古い話題で申し訳ないのですが.

http://mrxray.on.coocan.jp/bbs/DelphiBBS/mrxray_delphifan_coffe.cgi?tree=s2908#2911

>結果
>(A群)  正常に「932」を返した本数                   = 10本
>(B群)  「0」を返した本数                           = 9本
>(C群)  文字コード'20127'(US-ASCII)を返した本数   = 5本
>(D群)  (B群)のスペース(空白部)を削除して、「可変長」にしたら「932」を返した本数  = 2本


0というのはどうもシステムのデフォルトらしいです(不確実)
サンプル「886_ChangeMojiCode-04」のDetectCodepage関数の戻値の暫定値を

begin
  Result := -1; //0を-1にする


でテストしてみたらどうなるかですね.
Mlangは不明な,判定不可の場合に,「デフォルトでいいんじゃない?」
というのかも知れません.

(C群)でUS-ASCIIを返すのは,やはり日本語が極端に少ないから,
のような気がします.
つまり,少し日本語が入っていてもMlangは「間違いだろう?」と
判定するとか...
(B群)との違いは,文字数が少ないので,そう判定し,文字数が少し多いと
これだけおおいのだから,間違いではなく,「デフォルト」と判定するのかも.


[3095] Re:文字コードの検出返信 削除
2010/2/16 (火) 16:13:29 Mr.XRAY
> 0というのはどうもシステムのデフォルトらしいです(不確実)

今Delphi2010で確認してみました.

     Enc := TEncoding.GetEncoding(0);
     Memo1.Lines.LoadFromStream(GetStream, Enc);

こんなコードです.
Shift-JISのテキストをGetStreamに格納して表示しました.
文字化けしません.


[3096] Re2:文字コードの検出返信 削除
2010/2/16 (火) 16:21:13 Mr.XRAY
すみません.今ログを読み返してみたら,

>何処かで一度UNICODEへ変換する必要が有ります。

という記述がありました.
これなら問題ないですね.
元の文字コードとは関係なしに,Unicodeへの変換は可能だと思います.
特にDelphi2009以降で変換を実行するのであれば,
TEncodintクラスが使用できますから,Mlangは使用しなくてすみます.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82