• ベストアンサー

unicode <-> sjis 変換

UNICODEからSJISに変換するDLLをVC6.0で作成しました。 2層のswitch文で30000行(約400キロバイト)のソースファイルになりました。 コンパイル後も500キロバイトほどになります。 しかしvectorなどにおいてある変換ソフトをみると100キロバイトほど でした。そういったソフトはどのようにして変換しているのでしょうか? (APIかなにかを呼び出しているのでしょうか?) あるいはunicodeとsjisの漢字コードに数学的な相関関係があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.1

>2層のswitch文で30000行(約400キロバイト)のソースファイルになりました ・・・まぢですか? ごくろうさまです・・・。 作る前に疑問に思うべきでしたね。 大変でしたでしょう。 http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_multibytetowidechar.htm http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_widechartomultibyte.htm 変換してくれる関数はあるんですよ・・・。 1から作るにしても、switchするのはスマートじゃないですね。 テーブルを作って、ハッシュオブジェクトに格納するべきでした。

sha-girl
質問者

お礼

早速のレスありがとうございます。やはりそういった関数があるのですね。 コードは文字コード表から自動生成したもので それほど時間はかからなかったです。 ハッシュオブジェクトに格納していく方法に興味があるのですが ハッシュオブジェクトとはどういったものでしょうか? ちょっと調べてみましたがstatic変数みたいな感じなのでしょうか? VCに関してまったくの初心者です。

その他の回答 (1)

noname#30727
noname#30727
回答No.2

テーブルを作成して、バイナリサーチするとして、 必用な文字が9000文字だとすれば、9000×2×2で、約36kのテーブルです。 自分でバイナリサーチを作っても20行くらいだろうから、試しに作ってみるといいと思います。

sha-girl
質問者

お礼

ありがとうございます。理解しました。 バイナリデータとして変換コード表を持たせるわけですね。

関連するQ&A

  • IBM漢字コード⇒SJIS変換方法

    IBM漢字コードで受取ったファイルをJAVAにてSJISに変換したいのですが、変換方法がわかりません。 一度unicode変換した後、SJISに変換する必要があるのでしょうか? 過去の検索を見てもヒットせず困っております。 どなたか変換方法がわかる方ご教示いただけませんでしょうか。

  • unsigned char SJis[2]からstd::stringに変換

    開発環境は VC++ 2008 Express Edition あるDLLの関数で戻り値としてShiftJISの1文字が格納された unsigned char SJis[2] が返され,これを呼び出し側のプログラムで使っている文字列 std::string str に順に追加していこうと思っています. そこで, unsigned char tmpSJis[3]; tmpSJis[0] = SJis[0]; tmpSJis[1] = SJis[1]; tmpSJis[2] = '\0'; str += std::string(tmpCode); というコードを書いてループさせたのですが, error C2440: '<function-style-cast>' : 'unsigned char *' から 'std::string' に変換できません。 というエラーが出てしまいうまく変換できません. これを解決する方法はありませんか?

  • 文字化け

    0x81AF U+FF0D # FULLWIDTH HYPHEN-MINUS [2000] unicodeからSJISに変換するプログラムを作っていますが、 上記のコードのみ、SJISでは表示されず、その原因がわかりません。 unicode「-」 SJIS「・」←と、なってしまう。 他の変換(全文字やったわけではありませんが)はうまくいっており、また、SJIS→unicodeへの変換をすれば元通り「-」の表示になります。考えられる原因はどんなものでしょうか? 環境 ・VC++6.0 ・Windows VISTA

  • 指定したファイルの文字コードをShift_Jis→Unicodeに変換してくれるソフト(Windows)

    質問させて下さい。 タイトルのままですが、ファイルの文字コードを、Shift_JisからUnicode(UTF-16LE)に変換してくれるフリーウェアを探しています。 メモ帳を使えば可能な事ですが、何百というファイルを処理したいので、専用のソフトがあれば…、と思っています。 できれば、複数のファイルのD&D→一括変換が出来るものがいいです。 ベクターで探したのですが、適当なものが見つかりませんでした…。 どうかよろしくお願いします。

  • シフトJIS/7ビットJISの変換ライブラリについて

    C/C++で使える漢字コード変換のライブラリを探しています。 以下の条件に当てはまるライブラリ等ご存じでしたら、教えていただけないでしょうか? 1.C/C++で使用可(VisualC++, BorlandC++Builderなど、Windows環境) 2.シフトJISと7ビットJISコードの変換が可能(sjis -> jis, jis -> sjis) 3.SI/SO方式(0x0E/0x0F)でカタカナ/アルファベットを切り替えている7ビットJISコードからシフトJISへの変換が可能。また、同様に、シフトJISからSI/SO方式の7ビットJISコードへの変換が可能 4.ソースコードがあれば尚良い。 特に、3.のSI/SO方式で変換可能ライブラリを探しているのですが、なかなか見つかりません。 「ESC(I」「ESC(J」「ESC$B」を使用してアルファベット/カタカナの変換はどのライブラリでもできているのですが、上記のSI/SO方式での変換ができません。 現在までに評価して駄目だったものをリストにしてみます。 これ以外にご存じの方、もしくは、このリストに載っているものでも可能だよ!、というご意見などいただければ幸いです。 ・nkf for windows http://www.vector.co.jp/soft/win95/util/se295331.html ・babel http://tricklib.com/cxx/ex/babel/ ・漢字コード変換ライブラリ http://www.vector.co.jp/soft/win95/prog/se087586.html ・ack http://hp.vector.co.jp/authors/VA004474/win/ack.txt ・SJET http://www.vector.co.jp/soft/dl/dos/util/se018396.html

  • VBA(MS WORD)Unicode対応

    Microsoft WORDのマクロ機能(Visaual Basic6.0)を使って、Microsoft Wordの文章支援ツールを作成しています。 しかし、導入するPCがWindow Server2003英語版上のMicrosoft Wordで、このOSはSJISの文字コード対応していないようで、文字化けしてしまい、困っています。 このマクロは、ツリービューに表示した文字列を、Wordに挿入するだけのソフトですが、使用しているツリービュー(Tree View, Microsoft TreeView Control version 6.0)コントロールはSJISしか日本語を表示してくれません。しかし、WordにはSJISの文字列を挿入しても、文字化けします。このPC上の日本語はユニコードで入力されるようです。このPC上では、テキストファイル内の日本語やVisual Basic上の日本語コメントなどSJISで書かれた文字はすべてが文字化けします。 SJISをユニコードに変換してから、Wordへ挿入など試しましたが、依然文字化けして表示されます。 このマクロを別PCのWindows XP、VISTA上のWordで実行すると、文字化けせずに表示されます。 何かいい解決策はないでしょうか?

  • dllを使用しVB側に文字列を返す3

    いつもこの教えてgooで回答してくださってる方々にはお世話になってます。 前の質問でVCで作成したdllをvbから呼び出して 文字列を渡して返すということを教えて頂いたのですが その件に関連して質問があります。 eucをsjisに変換する自作の dllを使用しているのですが、問題が発生しました。 それは一部、漢字が正確に変換できないのです。 (ちなみにCから呼び出す分には問題は発生しません。) 例えば「これは全角です。」をeuc→sjisは問題ありません。 問題がでるのはある特定漢字コード、具体的には「野」です。 EUCでの「野」の漢字コードはCCEEかと思いますが open~input文で読みとったところCCFBになってしまいます。 これは何故なのでしょうか? またvbのstring型をbyrefで渡したときどの部分に 文字列長の情報が入ってるのでしょうか?184バイト目以降から 2バイト置きに渡した文字列が入っていましたが それ以前の情報は何が何を表しているのかまったくわかりませんでした。 どうかご教授お願いします。

  • 自作フォントで今までにない漢字を読みとおりに登録したい(TTEdit使用)

    以前も似たような質問をしたのですが再度質問させていただきます。 Aというフォントを作成しています。(TrueType) AはBというフォントを元に作成しました。 Bは作成したものではなく、ひらがな・カタカナ・数字・漢字などがすべて入っているものです。 これにひとつだけ漢字を足したいのでAを作成しました。 追加したいのは「しずか」という字ですが、「静」の左側と「靜」の右を足したような字です。 これを「しずか」と入力して変換した時に出すようにしたいのです。 「静」は SJIS:90C3 JIS:4045 Unicode:9759 「靜」は SJIS:E8CE JIS:7050 Unicode:975C でした。 上記の2文字と同じように登録することは可能でしょうか? 使用ソフトは「TTEdit」です。

  • byte型をstring型として扱うには

    今日の質問/マイページに反映されないので、再度の質問です。 windows2000-sp4/vb6-sp5環境です。ユニコードのデータをvbで直接入出力し、vb内でstring型で扱いたいとおもっています。今のところ、vbの入出力では、自動的にsjis/unicode変換がされるので、binaryで受け取り、string型にするのかなと思っています。byte型で受け取り、APIの"MoveMemory"("RtlMoveMemory")でstring型にcopyするのかなとは思っているのですが、うまくいきません。経験不足そのものです。vbでのbyte型とstring型双方向のbinaryな変換の方法をお教えください。

  • c++ CString char* BSTR textbox.text

    c++ 文字列CStringとchar*の変換問題(unicode) _________________________________________________________ Excel   string -> セールの文字列をVC++側に渡すため  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↓ ______________________________________________________________ VC++   char * -> Excelから引数として渡される文字列  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↓ __________________________________________________________ VC++   system::string -> FormのTextBox.Textとしてセット  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↓ ______________________________________________________________ VC++   char * -> FormのDataGridから受け取る文字列  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↓ ______________________________________________________________ VC++   CString -> VC++からExcelに渡すためBSTR前処理  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↓ __________________________________________________________ VC++   BSTR -> VC++からExcelに渡すため  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↓ __________________________________________________________ Excel   string -> Excelのある処理に使う  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 漢字やひらがなも文字化けないように変換できると思いますが、文字化けしたり変換が困難な状況です。 どうぞよろしくお願いします

専門家に質問してみよう