- ベストアンサー
utf8に変換したい
普段javaばかりで、使うプログラムの一部がcgiの為困っています。 utf8で書かれたCGIファイル内で別ファイルAを読み込み(これもutf8)、読み込んだファイルAの内容に別の文章を付け足して、さらにファイルBに書き出すというプログラムを組んでいます。 書き出したファイルBはutf8Nになってしまします。 調べたところutf8Nの方が好ましいとありましたが、今回のプログラムではutf8でないと日本語がうまく読み込めない状況です。 色々と調べたのですが、エラーがでたりと解決できません。 良い方法があれば、参考になるサイト等を教えていただけませんか。
- kbyshrk
- お礼率48% (121/249)
- CGI
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
CGIなんて言語はありません。 一昔前なら、Perlだと思っておけば大丈夫でしたが、最近ではRuby(on rails),Python等もシェアが増えてます。 また、このような「国際化」絡みは同じ言語でもバージョンによって対応状況が違います。 > 今回のプログラムではutf8でないと日本語がうまく読み込めない状況です。 その確認方法は?「読み込めない」のはどのプログラム? > 色々と調べたのですが、エラーがでたりと解決できません。 どんなエラーですか? > 良い方法があれば、参考になるサイト等を教えていただけませんか 使用言語も実行環境も不具合の内容もわからないので、良い方法も参考になるサイトも教えられません。 強いて紹介するなら、BOMありなしの違いについて。 http://ja.wikipedia.org/wiki/UTF-8#.E3.83.90.E3.82.A4.E3.83.88.E9.A0.86.E3.83.9E.E3.83.BC.E3.82.AF.E3.81.AE.E4.BD.BF.E7.94.A8.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6
関連するQ&A
- UTF-8対応のCGIを作成するには
今回、初めてUTF-8対応のCGIを作成しようと考えています。簡易掲示板型のものです。 (過去にはShift-JISのものを作成したことがあります) 現在いろいろ調べているところですがいまひとつ理解できていません。 使用するファイルは [A] 入力用&出力用HTML [B] データファイル (.txt) [C] CGI (Perl) 処理するデータは [1] HTML内フォームから入力されたデータ [2] データファイルから読み込んだデータ [3] データファイルに書き込むデータ ([1] をデータファイルに追加書き込み) [4] HTMLに出力するデータ ([1] と [2] を組み合わせて作成) ファイル3つをUTF-8Nで作成し、HTMLでcharsetをUTF-8に設定すればよいらしいことはわかったのですが、 CGI内では何を設定しておかなければいけないのでしょうか。 また、UTF8フラグなるものが存在するようですが、データ[1]~[4]のうち ・初期状態でUTF8フラグがつくもの/ないもの ・処理時にUTF8フラグの追加/削除をしなければいけないもの はどれなのでしょうか。 ご教示いただければ幸いです。
- ベストアンサー
- CGI
- URLのUTF-8からShift-JISへのデコード
CでUTF-8からShift-JISへのデコードを行うプログラムを 標準関数を使って作りたいのですが、どう行ったらいいのかわかりません。 例えば /f%e3%83%86%e3%82%b9%e3%83%88%e3%81%a7%e3%81%99.txt というURLを入力したら、 /テストです.txt という日本語入りのURLに変換して、 最終的にはその日本語ファイルのオープンを行いたいです。 参考になるHPやソースがありましたら、教えていただけないでしょうか?
- 締切済み
- C・C++・C#
- MFCで、UTF-8で保存したい
すいません。 またまた教えて下さい。 MFCで、UTF-8でファイルを保存しようとしていますが、うまくいきません。 下記のプログラムで、添付のエラーが出ます。 // UTF-8ファイル書き込み FILE* pFile1; fopen_s(&pFile1,"C:\\app\\8a.txt", "w, ccs=UTF-8"); //fopen_s(&pFile1,"C:\\app\\8a.txt", "w"); //UTF-8でないのでOK if (pFile1) { CStdioFile file(pFile1); file.WriteString(_T("abcあいうえお")); file.Close(); } <環境> windows8 visual studio2012(2008でも同じでした) MFCで、文字セットはマルチバイト文字セットを使用するにしています。 参考にしたHP http://faithandbrave.hateblo.jp/entry/20080724/1216890457 なぜでしょうか? よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- UTF-8での保存について
エディットボックスに入力してある日本語の文字列をUTF-8やUTF-8Nでテキストファイルに保存したのですがうまくいきません。 UTF-8の場合はファイルの先頭に3バイトのBOMをつければいいらしいので、 ファイルの先頭に0xEF,0xBB,0xBFの3バイトを追加してテキストファイルに保存しましたがメモ帳で開くと文字化けします(メモ帳で開くときは文字コードをUTF-8にして開いてます)。 作成したテキストファイルをバイナリエディタで開いてみると先頭の3バイトはEFBBBFとなっているので何も問題はないと思うのですが、どうして文字化けするファイルができてしまうのでしょうか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語
- ベストアンサー
- C・C++・C#
- プログラムをUTF-8多言語のスクリプトに変更
Yomiメーラー(http://yomi.pekori.to/yomi-mailer.html)というフリーウェアを利用して、UTF-8の多言語対応のスクリプトに変更しております。 当方、プログラミングの知識がなく、Perlをマニュアル通りに設置するだけの技能しかないので、「中文電脳/UTF-8で簡単多言語CGI」というWebページを参考にUTF-8化に挑んでおります(※上記サイトのURLは長くてうまく記述できそうもないので、Googleで検索してみてください)。 上記「中文電脳/UTF-8で簡単多言語CGI」の指示に従ってそのフリーウェアをUTF-8対応にしていきましたが、どうしても私の猫の額のような知識では分からない箇所が出てきました。 「mimew.pl」というファイルの中で様々な文字モードのための処理のためのスクリプトが書かれていると思いますが、どこをどう無効にすればよいのか分かりません。 テキストファイルとしてこの「mimew.pl」を参考用に、以下の場所にアップロードしてみました(文字化けする場合UTF-8でエンコードしてください)。 http://cgi.www5b.biglobe.ne.jp/~xpress/test-2/img-box/img20080804045138.txt ご教授頂ければ幸いです。
- 締切済み
- Perl
- UTF-8にマップできません???
今、Atomを愛用しております。 チャンと日本語変換できているのに 後半のようなエラーが出るのはなぜでしょうか??? import java.applet.*; // Applet import java.awt.*; // Label, TextField, TextArea, Color, Button import java.awt.event.*; // ActionListener, ActionEvent import java.io.*; // InputStream, BufferedReader, InputStreamReader etc import java.net.*; // URL, Socket, UnknownHostException import java.util.*; // StringTokenizer //public class Chat extends Applet implements Runnable, ActionListener { // Runnable, ActionListenerインターフェース実装 Label TitleLabel; // タイトルラベル TextField InputField; // 入力フィールド Button SendButton; // 送信ボタン Button QuitButton; // 終了ボタン TextArea DisplayArea; // 表示エリア TextArea MemberArea; // メンバーエリア Thread thread; // スレッド Socket socket; // ソケット String Name = null; // 名前 //AudioClip Chime; // チャイム BufferedReader NetInput; // ネットワーク経由入力 PrintStream NetOutput; // ネットワーク経由出力 C:\JAVA>javac Chat.java Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x93)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x81)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x81)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x8E)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0xC0)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x91)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x95)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x8B)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x89)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^
- ベストアンサー
- Java
- 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で比べてみても、変わりがなく、漢字や記号の羅列でしかありません。どうか教えてください。
- ベストアンサー
- C・C++・C#
- UTF-8で書いたperlのパスが正しく読まれない
元々htmlファイルもcgiファイルもShift-JISで書いていました 英語環境に変えようと、UFT-8にすべくEncordingConverterでファイルを変換しました htmlファイルは文字コード指定も当然UFT-8にし、アップして表示させてみたところ問題なく表示されました しかし、cgiファイルの方が正しく表示されず、perlチェックをしてみたところパスが ・ソ#!/usr/bin/perl となっていました これが原因で正しく表示されなかったようです そこでcgiファイルをテキストエディタで開いてみたのですが、そのエディタ上では #!/usr/bin/perl と本来あるべき正しい表示になっています 文字コードもUTF-8形式になっています どうしれやればきちんと読み取ってもらえるのでしょうか? エディタで開いても「・ソ」の部分が表示されないのでなおしようがなく困っています どなたか解決方法お分かりの方ぜひご教授ください よろしくお願いします
- ベストアンサー
- CGI
- UTF-8で日本語を表示させるには
とても基本的な事かもしれませんが、文字セットをUTF-8に設定すると、ソースに日本語を使うと画面には?????と表示されますが、UTF-8の設定でも、以下の様な記述をすると、日本語が表示されています。 <meta charset=utf-8.......... ・ ・ <div class="editsection" style="float:right;margin-left:5px;">[<a href="/index.php?title=Nakagawa_Shoko&action=edit&section=1" title="Nakagawa Shoko">edit</a>]</div> <a name="Profile"></a><h2> Profile </h2> <ul><li><b>Name:</b> 荳ュ蟾晉ソ泌ュ・ </li><li><b>Name (romaji):</b> Nakagawa Shoko ちなみに「 荳ュ蟾晉ソ泌ュ・」この部分はweb上では、「中川翔子」となりますが、一体この記述方法は何なのでしょうか?何故、「 荳ュ蟾晉ソ泌ュ・」が中川翔子となるのか全く分かりません。 教えてgooもやはり日本語部分が、半角カタカナになってますが、どうすればこんな記述が可能なのでしょうか? どうすれば、UTF-8で日本語表示が可能になるのか教えて下さい。 文字変換ソフトとかあるのでしょうか? また初心者に参考になるサイトがありましたら教えて下さい。 ちなみにホームページ作成ソフトは持っていません。
- 締切済み
- HTML
- utf-8の文字列に対してURLエンコードを行なうには?
最近 perlをutf-8で書き始めたのですが、文字コードではまっています。 cgiの内部から別のcgiへpostで全角文字を送る場合 URLエンコードしてから送ると思うのですが 文字コードがutf-8の時、どのようにURLエンコードしたら 良いのか分からず困っています。どなたかご存知でしょうか? ちなみに文字を受ける方のcgiでは以下の様にURLデコードしています。 $data =~ tr/+/ /; $data =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; 試用しているperlのバージョンはperl5.8です、よろしくお願いします。
- ベストアンサー
- Perl