- 締切済み
Unicode
先日は文字コードについて色々助言してくださりありがとうございました。 おかげさまでJIS,EUC,SJISの変換はできましたが、 Unicodeについて詰まっているところがあります。 SJIS→UnicodeはSJISにあったU+XXXXに変換し、 それを1~4バイトにさらに変換して文字表記されることで出来ます。 後者の1~4バイトにさらに変換するやり方は出来ているのですが、 前者のSJISにあったU+XXXXに変換するところで詰まっています。 ##SJIS Unicode Name Note 0x00 U+0000 # <control> 0x01 U+0001 # <control> 0x02 U+0002 # <control> 0x03 U+0003 # <control> 0x04 U+0004 # <control> 0x05 U+0005 # <control> 0x06 U+0006 # <control> 0x07 U+0007 # <control> : : こういった変換表(テキストファイル)があるのですが、 どのようにしたらこのファイルをプログラム上で操作? できるのでしょうか? 例)SJISで0x07→U+0007→1~4バイト変換の 0x07→U+0007部分についてです。 また、逆に変換する際の0x07←U+0007についても わからないでいます。 何かヒントをください。
- hardtechno
- お礼率30% (197/650)
- C・C++・C#
- 回答数2
- ありがとう数0
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
参考URLに解説でてるんですがねぇ・・・ 以下はコーディング例です。 #include<windows.h> /** SHIFT-JISの文字列をUniCodeに変換し、その領域のポインタを返す 返されたポインタは使用後、free()で解放すること */ static LPWSTR sjis_uni(LPSTR sjis) { size_t size = MultiByteToWideChar(CP_ACP,0,sjis,-1,NULL,0); LPWSTR p = (LPWSTR)malloc(size << 1); MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sjis,-1,p,size); return p; } /** UniCodeの文字列をSHIFT-JISに変換し、その領域のポインタを返す 返されたポインタは使用後、free()で解放すること */ static LPSTR uni_sjis(LPWSTR uni) { size_t size = WideCharToMultiByte(CP_ACP,0,uni,-1,NULL,0,NULL,NULL); LPSTR p = (LPSTR)malloc(size); WideCharToMultiByte(CP_ACP,0,uni,-1,p,size,NULL,NULL); return p; } //----- LPSTR sj = read(); //ファイルからSHIFT-JIS読み込み LPWSTR uc = sjis_uni(sj); //UniCodeに変換 write(uc); //ファイルに書き込み free(uc); //メモリ解放 //----- LPWSTR uc = read(); //ファイルからUniCode読み込み LPSTR sj = uni_sjis(uc); //SHIFT-JISに変換 write(sj); //ファイルに書き込み free(sj); //メモリ解放 read()、write()は架空の関数です。
- nda23
- ベストアンサー率54% (777/1415)
MultiByteToWideCharやWideCharToMultiByteは使っていないのですか? http://msdn.microsoft.com/ja-jp/library/cc448053.aspx http://msdn.microsoft.com/ja-jp/library/cc448089.aspx
関連するQ&A
- エディットコントロールへのUnicodeの入力
VisualStudio2005 C++、マルチバイト文字セットでWindowsアプリ ケーションを作っています。動作環境は、WindowsXP SP3 (x86)。 モーダルダイアログに貼り付けたエディットコントロールでは、 MicrosoftIMEStandard2002で変換確定した文字(例えばハート (U+2665))が表示されるので、GetWindowTextW()でそのユニコード 文字列を取得できるのですが、 モードレスダイアログに貼り付けたエディットコントロールでは、 変換文字列が'?'にコンバートされて表示されてしまいます。 コピー&ペーストでは、Unicode文字も表示できるので、 IMEの変換後の処理がうまくいっていないと思うのですが、 どのようにすれば、変換確定しても'?'にコンバートされずに 文字列が表示できますでしょうか? お教えください。よろしくお願いします。 (むかしつくったアプリのため、Unicodeでビルドするには 修正が多いので、マルチバイトのビルドでやりくりしたいのです。)
- 締切済み
- C・C++・C#
- Unicodeで編集できるテキストエディタってありますか?
これまで「Unicode対応」を謳ったエディタの多くは 「Unicodeテキストの読み書きが出来る」エディタに過ぎませんでした。 つまりファイルを読み込むときにUnicode→シフトJISに変換し、編集は シフトJIS環境で行う……という。 保存も同様でシフトJIS→Unicode変換したのち保存します。 これだと確かにUnicodeテキストの読み書きは出来ますが、 Unicode最大に特徴であるJIS外文字のが入っているとシフトJIS変換時に 「?」になってしまいます。 編集もUnicode環境で行えて、Unicodeフォントを指定してやればJIS外文字も 表示できる、そんなフリーエディタってありませんか? 最近の「秀丸」で出来るようになったのは知ってるんですが……
- ベストアンサー
- フリーウェア・フリーソフト
- 文字コードの変換プログラム
SJIS,JIS,EUC,Unicodの変換プログラムを作っています。 SJISを基調とし、それ以外とコード組む事で実現させていますが、 SJIS-Unicodeの変換がどのように行えばよいのかわかりません。 サイト等で対応表なども参考にしているのですが、 どこでどう使えばいいのか見当がつきません。 アドバイスお願いします。
- 締切済み
- C・C++・C#
- Unicode-Japaneseでの絵文字変換
Unicode-Japaneseを使って別キャリアの絵文字を相互変換しようと 思っています。 ソースはShift_JISで作成、画面表示もShift_JISです。 $in{text}はformからの受取です。Softbankの3G端末でテストしています。 入力を受け取り、一度、utf8に変換後、また元に戻しているつもりですが、 $str2を画面に表示しても、絵文字が化けてしまっています。 (普通のテキストなら化けません) 何か考え方が間違っているでしょうか。 以下、変換して戻している部分です。 うまくいった場合には、$str1 をデータとして保存しようと思っています。 $s = Unicode::Japanese->new($in{text},"sjis-jsky"); $str1 = $s->conv("utf8"); $s = Unicode::Japanese->new($str1,"utf8"); $str2 = $s->conv("sjis-jsky"); よろしくお願いいたします。
- 締切済み
- Perl
- unicode <-> sjis 変換
UNICODEからSJISに変換するDLLをVC6.0で作成しました。 2層のswitch文で30000行(約400キロバイト)のソースファイルになりました。 コンパイル後も500キロバイトほどになります。 しかしvectorなどにおいてある変換ソフトをみると100キロバイトほど でした。そういったソフトはどのようにして変換しているのでしょうか? (APIかなにかを呼び出しているのでしょうか?) あるいはunicodeとsjisの漢字コードに数学的な相関関係があるのでしょうか?
- ベストアンサー
- C・C++・C#
- PythonのUnicode文字について
PythonのUnicode文字について 最近pythonを始めました。このサイト(http://www.pythonweb.jp/index.html)でいろいろと勉強しているのですがUnicode文字についてよくわかりません。 #coding: UTF-8 print u"こんにちは" と入力するとなぜか File "test.py", line 2 print u"こんにちは" SyntaxError: (unicode error) 'utf8' codec can't decode byte 0x82 in position 0: unexpected code byteと表示され出力されませんでした。何故でしょうか。unicode文字についても説明をお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- ユニコードへの変換について
JavaScript で %82%A0 ・・・といったデコードされた 文字列から、ユニコード %u3042・・・ へ変換する 方法を教えてください。なにとぞお願いします。
- ベストアンサー
- JavaScript
- TeraPadの文字コード
TeraPadの文字コードについて教えてください。 1. TeraPadで扱える文字コードは Shift-JIS、JIS、EUC、Unicode、UTF-8、UTF-8N の6種類あるようですが、このEUCとEUC-JPは 同じものですか? 2. Shift-JISで保存すると、TeraPadの下の部分に 表示される文字コードがSJISとなります。 これはShift-JISのことですか? 3. 短い文章では文字コードを誤認識する場合も あるようですが、どうしたら正しく認識 させられますか? 指定した文字コードで保存できず困っています。
- ベストアンサー
- フリーウェア・フリーソフト
- 「髙(はしごたか)」を文字コード変換
PHPにて、シフトJISで書かれたファイルを読みこみ、文字コードをEUCに変換して出力させる処理を書いています。 mb_convert_encoding($str, "EUC-JP", "SJIS")にて変換させています。 ただ、以下の文字が 髙(はしごたか)、 﨑(たつさき) うまく変換できずに 「?」という文字になってしまいます。 何か解決方法はないでしょうか??
- ベストアンサー
- PHP
補足
使っていません。 前回アドバイスいただきましたが、それらの関数の使い方も よくわからなかったので、原始的な方法でやってます。 今回のはファイルとして読みだして、0xYYを検索し、 該当するU+YYYYを抽出(うまくできるかな??)しようと 思っていますが、まだじっくりとは考えていません。