• ベストアンサー

VC++でEUC->ShiftJIS変換

cockyの回答

  • ベストアンサー
  • cocky
  • ベストアンサー率57% (232/402)
回答No.1

VC++の標準ライブラリやMFCには漢字コードの変換機能はないようですね。 Win2000ならSDKに変換関数があるようですが。 それ以外だと、ライブラリというよりDLLになってしまいますが、nkf32.dllとかunkanj.dllなんてのがよく使われてますね。 どちらも「統合アーカイバプロジェクト」のページ(URLは下記)から入手できますので、とりあえずダウンロードされてみるのがいいんじゃないでしょうか。

参考URL:
http://www.csdinc.co.jp/archiver/index.html
madman
質問者

お礼

回答ありがとうございます。 実は、strcode.dllというフリーのDLLをみつけて、それで何とかなりました。 削除を依頼していたのですが間に合わなかったようですね。

関連するQ&A

  • EUCからUTF-8へのコード変換

    いつもお世話になっております。 C++でEUC-JPで書かれた文字列をUTF-8に変換するプログラムを作成したいのですが、変換ルーチン(TBL等)をどのように書けば良いか分かりません。 サンプル等があれば教えて頂けないでしょうか? 提供されているライブラリ等は使用しない(できない)予定ですのでお願いします。

  • FortranをC++(VC++)へ変換

    FortranをCまたはC++へ変換したいと考えています。 f2cを使うと、一応変換は行ってくれるものの、出来あがったCのプログラムをコンパイルする際、fortranのライブラリを参照する必要があるなどの制約が生じてしまいます。 VC/VC++に対応したプログラムソースへ変換するツールをご存知ないでしょうか? また、今だと、VC#まで変換してくれるツールがあると非常に便利なのですが・・・ 大量のソースコードを変換する必要があり、変換時のミスなどを考えるとツールで機械的に変換する方法を探しています。

  • PHPでの開発時の文字コードについて

    「サーバー、データベースの文字コードがEUC-JP、最終的なブラウザへの出力はShiftJIS」 という要件の場合、プログラムとHTMLの文字コードはどのように決めるべきでしょうか。 個人的に、以下の3点のケースが考えつきました。 (1)プログラムもHTMLもEUC-JPで記載し、レスポンスの直前にShiftJISへ変換する。 (2)プログラムはEUC-JP、HTMLはShiftJISで記載。プログラムの変数や関数の結果をHTMLに埋め込むときは必ず事前にShiftJISへ変換する。 (3)プログラムもHTMLもShiftJISで記載し、データベースへ格納するときは事前にEUC-JPへ変換する。 個人的には、(3)は論外として、変換が1箇所で済む(1)が最も楽そうに感じます。 また、(1)であれば、ShiftJIS以外の文字コードへの対応が生じた場合も簡単に済みそうな気がします。 (そういった状況が生じるかどうかはわかりませんが……) 皆様であればどのような方法がオススメか、また、普段はどのような考えで文字コードを 決めているのか、理由も合わせて教えていただけると幸いです。 ※不勉強故、的はずれな点があれば、ご指摘いただけると幸いです。

    • ベストアンサー
    • PHP
  • UTF-8をわざわざEUC-JPに変換する理由

    何か得することとかありますか? サンプルプログラムなんかだと、よく変更しています 私はサイトを全てUTF-8でやっているので、わざわざ変換しなくてもいいかなと思っています でもtxtファイルがUTF-8で記述されていて、なおかつプログラムもUTF-8なのに わざわざEUC-JPに変換してから色々やってるプログラムが多いのです。 これは多分私の認識不足なのか、それとも古い何かに対応する為なのかが分かりません。 まだ勉強始めたばかりなので、何でこんなことと思われるかも知れませんが なにとぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • VC++2005EEでビルドできない

    VC++ 2005 ExpressEditionをインストールし、 マイクロソフトのヘルプに書いてある手順通りに 設定を行ったのですがビルド時に以下の エラーメッセージが表示されます。 エラーメッセージの一部 test2.obj : error LNK2019: 未解決の外部シンボル __imp__DispatchMessageW@4 が関数 _wWinMain@16 で参照されました。 test2.obj : error LNK2019: 未解決の外部シンボル __imp__TranslateMessage@4 が関数 _wWinMain@16 で参照されました。 test2.obj : error LNK2019: 未解決の外部シンボル __imp__TranslateAcceleratorW@12 が関数 _wWinMain@16 で参照されました。 test2.obj : error LNK2019: 未解決の外部シンボル __imp__GetMessageW@16 が関数 _wWinMain@16 で参照されました。 このようなエラーが計20発生してしまいます。 ちなみに作成しようとしたプログラムは単に ウインドウを表示するだけのもので、名前はtest2です。 どなたか対処法をご存知の方がいらっしゃいましたら ご教授願います 参照URL:http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/

  • VC++ 6.0 でJPEGをBMPに変換したい…

    VC++ 6.0を用いて画像処理のプログラミングをしています。 プログラムでJPEGを読み込んで、BMPに変換して画像処理をした後、JPEGもしくはBMP、どちらでも保存できるようにできればいいと思い、Webをいろいろ探してみたところ、IJGのjpeg-6bというものを見つけました。これをコンパイルして、libjpeg.libほか、多数の実行ファイルにすることができたのですが、ここからVC++ 6.0で使う方法がまったくわかりません。そもそもライブラリとは何なのか分かっていません。VC++を始めて数ヶ月ですので具体的に教えてください。また、もっといい方法があればそちらの方も教えてください。

  • VCを通して出しか起動できません

    フリー版VC++2005でゲームを作成しています。 VCからF5でデバッグ起動すれば動作するのですが、 EXEファイルを直接起動した場合は即、いつもの「問題が発生したため…」 が表示されて止まります。 この様な場合の対処方法を教えてください。 OSはWindowsXpです。irrlicht 1.1というライブラリを使用していますのでプログラムのかなりの部分がブラックボックスです。 よろしくお願いします。

  • jpeg2000に変換したい

    VC++6 でプログラムしています。 JPGからJpeg2000に変換したいのですが DLLとかライブラリとか探しても見つかりません どうか教えてください。

  • UTF8→ShiftJISに変換したいです!

    VC++2010, MFCです。 参考ページ(↓)でできそうだったのですが、 http://www.sutosoft.com/oldroom/devdiary/20020504.html UTF-8からShift_JISにしたいのは、メディアプレーヤーで作られた wpl ファイルも扱いたいからです。 具体的にいうと、ファイル一覧に プレイリストがあった場合、展開してメディアプレイヤーで開いて、再生後 【m3u ファイル】に(コーディングで)アウトプットするのが目的です。 ShiftJISに変換して、いったんファイルに出力してから、再度読込処理を行ってもかまいません。 BOOL C○○Dlg::UTF8ToShiftJIS(const CString& src, CString* dest) {  int sizeOfString = (src.GetLength() + 1);  LPWSTR lpsz = new WCHAR[sizeOfString];  //LPSTR lpsz = new char[ sizeOfString ];  _tcscpy_s(lpsz, sizeOfString, src);    //strcpy_s(lpsz,sizeOfString, src);  //delete[] lpsz //http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200612/06120010.txt //char* orig = "Hello, World"; char* nstring; nstring = new char[sizeOfString]; strcpy_s(nstring,sizeOfString, (LPCSTR)(lpsz)); // ●UTF8からUnicodeに変換した場合の長さを求める。●  //http://msdn.microsoft.com/ja-jp/library/cc448053.aspx  //const_cast<LPTSTR>(static_cast<LPCTSTR>(str)  int iWideLength = ::MultiByteToWideChar(CP_UTF8, 0,【1】nstring, src.GetLength(), NULL, 0);  if (iWideLength == 0)return FALSE;  LPWSTR lpWideString = new WCHAR[iWideLength];  int iLength;  if (    // ●UTF8からUnicodeに変換する。●    (::MultiByteToWideChar(CP_UTF8, 0, 【2】nstring, src.GetLength(), lpWideString, iWideLength) == 0)    // ●UnicodeからShift_JISに変換した場合の長さを求める。●    || ((iLength = ::WideCharToMultiByte(CP_ACP, 0, lpWideString, iWideLength, NULL, 0, NULL, NULL)) == 0)    // ●UnicodeからShift_JISに変換する。●        //http://msdn.microsoft.com/ja-jp/library/cc448089.aspx    || (::WideCharToMultiByte(CP_ACP, 0, lpWideString, iWideLength, 【3】(LPSTR)dest->GetBuffer(iLength), iLength, NULL, NULL) == 0)){    // ●変換に失敗●    delete lpWideString;    return FALSE;  }  // ●変換に成功●  delete lpWideString;  dest->ReleaseBuffer();  return TRUE; } ・・・という風に少し修正をして、次のソースで呼び出しています。  CString src;  CFile file;  if (file.Open(FilePath, CFile::modeRead)){   DWORD iLength = file.GetLength();   //CString src;   file.Read(src.GetBuffer(iLength), iLength);   file.Close();   src.ReleaseBuffer(iLength);   CString dest;   if (UTF8ToShiftJIS(src, &dest) ==TRUE){    MessageBox (dest);   }   // ●この時点で、destにShift_JISに変換された文字列が格納されている。  } 以下(↓)を参考に、【1】~【3】の部分で、他のパターンもキャストしてみたのですが・・・ /* http://d.hatena.ne.jp/shikaku/20090519/p3 ■[CPP][VC]LPCSTRなどのVC++の紛らわしい定義の意味 一見正体不明のVC++オリジナル定義。よーくみれば違いが分かる。名前 意味 LP *(ポインタ) C const TSTR TCHAR(char) STR char WSTR WCHAR(ユニコード用:2byte) ゆえに定義 正体 LPSTR char* LPCSTR const char* LPTSTR TCHAR* LPCTSTR const TCHAR* LPWSTR WCHAR* LPCWSTR const WCHAR* となる。+/ できるだけスマートに記述したいです。エクセル版を作っていたときは、CreateObject("ADODB.Stream")を使っていたみたいです。ただ、VC++でどう書けばいいか、分かりませんυ UTF8→UTF16→ShiftJIS ←これは、あまり、使いたくない 変換 です。 後は、これも参考になりそうですが、 http://www.softist.com/programming/sjis-utf8/sjis-utf8.htm bufUTF8を何型でどこで宣言すればいいのか?分かりません。 これも(↓)はてなです。 http://www.s-cradle.com/developer/sophiaframework/sf_reference/ref.SFXTextEncoding.html 何回も試しましたが、TRUEが返ってきても、変換前と変換後をMessageBoxで比べてみても、変わりがなく、漢字や記号の羅列でしかありません。どうか教えてください。

  • VC++6.0からVC++.NET2005へ移植

    VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。