HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0828
Ze@文字コードの判別。7未解決


Ze@

リンク

2009/8/28(Fri) 17:40:24|NO.27369

変数に代入された文字列の、文字コードを判別したいと思っています。
因みに、取り扱う予定の文字コードは、
・SJIS
・Big5
・GB2312
・EUC-JP
です。
変換については、MultiByteToWideCharで可能なのですが、
対象の変数に代入されている文字列の、文字コードが一定でないため、この様な質問をさせていただきました。
何方かご教授お願いします。



この記事に返信する


ANTARES

リンク

2009/8/29(Sat) 04:37:05|NO.27393

 SJIS、JIS、EUC-JPを判別するDLLのソースを公開しているので
読んでみるといいかもしれません。
日本語が数バイト程度だと完全判別はできませんが、長いものならほぼOKです。
しかし、2つも増やすとどうでしょう?
各文字コードの構造にもよるので、JISみたいだったらいくら増えても簡単ですが。



ANTARES

リンク

2009/8/29(Sat) 04:58:50|NO.27394

 ちょっと調べてみましたが、GB2312は文字集合の規格で、符号化方式として
最もよく使われているらしいEUC-CNを仮定すると、EUC-JPとの判別が難しそうです。

 Big-5はSJISとよく似ているらしいので、SJISとの判別が難しそうです。

 Big-5とEUC-CNは、SJISとEUC-JPの判別と同じやり方で判別できそうですが、
「長いものならほぼOK」というのは、長いものならひらがなが出てこない
文章はまず考えられないという特殊事情によるので、
日本語ほど確定できないかもしれません。



Kpan

リンク

2009/8/29(Sat) 09:23:34|NO.27400

DetectInputCodepageを利用するスクリです。
ひとまずどんなものなのかチェックするために書いてみたものなので、
まんまなコードですが。精度とかもあるそうで。
http://www.google.co.jp/search?q=DetectInputCodepage


#define IID_IMultiLanguage2 "{DCCFC164-2B38-11d2-B7EC-00C04F8F5D9A}" #define CLDID_CMultiLanguage "{275C23E2-3747-11D0-9FEA-00AA003F8646}" #usecom IMultiLanguage2 IID_IMultiLanguage2 CLDID_CMultiLanguage #comfunc ML2_DetectInputCodepage 22 int, int, var, var, var, var newcom pML2, IMultiLanguage2 dialog "", 16 if stat = 0 : stop notesel pSrcStr noteload refstr pcSrcSize = strsize dim lpEncoding, 4 pnScores = 1 ML2_DetectInputCodepage pML2, 0, 0, pSrcStr, pcSrcSize, lpEncoding, pnScores mes stat mes "コードページ: "+lpEncoding.1 delcom pML2



KA

リンク

2009/8/30(Sun) 13:21:31|NO.27443

>>変数に代入された文字列の、文字コードを判別したいと思っています。
>>変換については、MultiByteToWideCharで可能なのですが、
>>対象の変数に代入されている文字列の、文字コードが一定でないため・・

 質問の内容が
  ○文書内の文字コードは同じだが、毎回異なる文字コードの文書を読み込む。
  ○文字コードが最初から混在している、文書を読み込む。(HTML? UNICODE?)
 のどちらか(多分下かな?)で対応が変わります。

 HTMLやUNICODE等の文字コードが埋め込まれた文字列なら、その情報を元に文字
 コードの判別は出来ますが、それらの情報が無い(又は消した)文字列からの判
 定はかなり困難です。

 漢字と簡体字・繁体字はS-JISコードを基準にすると、重なっている部分が多く
 あり、重なった部分の判定は実際に目で見るしか有りません。



Ze@

リンク

2009/8/30(Sun) 17:32:50|NO.27453

皆さんご回答ありがとうございます。
Kpan氏のDetectInputCodepageで何とかなりそうですが、
やはり精度が気になるところです。

KA氏の質問についてお答えすると、どちらかと言うと前者に当たります。

もし、これ以上良い案がない場合は、これで解決にしたいと思います。



Ze@

リンク

2009/9/1(Tue) 19:38:24|NO.27489

NO.27453の解決云々は一時的に取り消してください。

どうやら、http://msdn.microsoft.com/en-us/library/aa741217%28VS.85%29.aspx
によると、MLDETECTCPを指定すると良いそうなのですが、
hspでその様にする方法が分かりません。
ご教授お願いします。



a

リンク

2009/9/1(Tue) 19:49:48|NO.27490

DetectInputCodepage の第一引数がそうだと思うけど
(HSPの#comfunc では第一はCOMオブジェクト型変数なので、第二引数に指定)



ONION software Copyright 1997-2023(c) All rights reserved.