• ベストアンサー

文字化け

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

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

幾つかの文字は、MSの変換表が腐ってるので、自前で特殊処理が必要です。 >他の変換(全文字やったわけではありませんが)はうまくいっており 全角英数や記号など、漢字以外の部分は、是非、全文字試すのをお勧めします。「-」以外にも何文字か誤って変換されてしまう文字がありますから。 実は、漢字部分も、旧字体と新字体がひっくり返ってたりして、自前で特殊処理が必要な文字も数文字あったりもするんだけど、全部調べる気力は無いです(私はメドイから「これはフォントが入れ替わってるんだ。フォントファイルが悪い」と思い込む事にした)

hardtechno
質問者

お礼

お二方ともありがとうございます。 非常にためになりました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

http://ja.wikipedia.org/wiki/Unicode#WAVE_DASH_-_FULLWIDTH_TILDE.E5.95.8F.E9.A1.8C その他の文字でも問題は起こりうるらしい #とりあえず俺は理解してません

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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についても わからないでいます。 何かヒントをください。

  • unicode <-> sjis 変換

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

  • JavaScriptが文字化けする

    JavaScriptファイルをSJIS、EUC、UTF8を統一したために スクリプト上で var str = "あいうえー"; をUTF16で var str = "\u3042\u3044\u3046\u3048\u30fc"; このように変換をしましたが alert("\u3402");とかですと、文字化けはしないのですが、 innerhtml="\u3402"; のようにやると、文字化けをしてしまいます。 どのようにしたら対処できますでしょうか? もし、対処方法なければ、仕方ないので、コード判別をできるようにと考えています。

  • MySQL5.1の文字化け

    多くの方が同様の質問をされていたのですが、一致する問題が見つけれなかったので、ご存じの方がおられたら教えて下さいm(_ _)m (環境)  PHP 5.2.8 ZendFramework 1.5.1 から Pdo Mysqlを使用  文字コード:SJIS  Mysql 5.1  文字コード:EUC-JP (質問内容) 携帯の絵文字データをSJISのバイナリでスクリプト中に埋め込むため、スクリプトの文字コードをSJISに統一したところ、文字化けが発生しました。 SET NAMES SJIS のSQLを発行することで表示は正しくできるようなったのですが、新たにレコードを追加しようとすると文字化けが発生します。 例)情報 → 情表 insertを行う前の文字コードをSJIS,SJIS-win,EUCと変えてみましたが、SJISもしくはSJIS-winの場合は上記の例のとおりとなり、EUCにすると完全な文字化けとなりました... おそらく登録時にMYSQLがSJIS→UTF8→EUCに変換される時に正しく変換されていないものと思われるのですが、どなたか対処方法をご存じないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字コードの変換プログラム

    SJIS,JIS,EUC,Unicodの変換プログラムを作っています。 SJISを基調とし、それ以外とコード組む事で実現させていますが、 SJIS-Unicodeの変換がどのように行えばよいのかわかりません。 サイト等で対応表なども参考にしているのですが、 どこでどう使えばいいのか見当がつきません。 アドバイスお願いします。

  • SJIS→UTF-8の文字コード変換

    Perlで、SJISの16進で表記された文字があるのですが、それがうまく表示できません。 Unicodeの16進文字コードだとうまく表記できるのですが…。 以下がスクリプトです。 以下の場合だと。(句点)がSJISだと0x8142で、 その16進文字列を表示したいのですが、実行結果にあるエラーが出てしまいます。 Unicodeだと。は0x3002なのですが、うまく表示できています。 すみませんがよろしくお願いします。 ---------------------------------------- # このファイルの文字コードはSJIS # 改行コードはLF # # 。 SJIS 0x8142 # Unicode 0x3002 # use Jcode; use encoding "sjis"; $a = 0x8142; $a = Jcode->new($a, "sjis")->utf8; printf("句点の表示…%c\n",$a); printf("句点の表示…%c\n",0x3002); ---------------------------------------- 実行結果 "\x{8142}" does not map to shiftjis at test.pl line 14, <DATA> line 846. 句点の表示…\x{8142} 句点の表示…。

    • ベストアンサー
    • Perl
  • VB6での文字コードダンプ

    VB6を使用して文字のダンプを取得したいのですが、UNICODE→SJIS変換しての バイト長を取得するものはよく見かけるのですが、全角文字の文字コードの取得法は、調べてはいるのですがなかなか見つかりません。 行いたいことは、全角の"あ"の場合、0x82、0xa0のように SJISでの1バイト毎の16進(10進でも可)の文字コードを 取得したいということです。 よろしくお願いします。

  • 文字コード変換

    JavaでDBから取ってきた、全角ハイフン「-」(Unicode\u2212)を出力すると、認識できず、「?」となってしまいます。うまく変換する方法を教えてください

  • MP3が文字化けし、再生できなくなりました。

    調べたところ、SJISとUnicodeの違いだと分かり、ID3uniを使って変換しましたが、スマホでは何も変わっておらず、題名はトラック3などと表示されたままで、しかも再生できなくなりました。音楽・動画では再生できなくなりましたが、Playミュージックでは再生できます。でもこの再生方法だと1曲だけ再生して終わってしまい、次の曲を再生してくれないので、音楽・動画で再生したいのです。機種は101Fです。よろしくお願いします。

  • 「彅」という文字のエンコード

    今見つけたのは「彅」だけなのですが、 mb_convert_encoding()にて変換先コードをSJISにすると変換出来ません。 そこでsjis-winとすると正常に表示されました。 しかし、当然の事ながら、Linux上では表示されませんでした。 (変な縦長の四角形?のようなものが表示されました) これをLinux上で表示させるにはどういう文字コードで変換をすれば 良いのでしょうか? 出力は絶対SJISでなければなりません。(EUCやUTF-8は不可) この制限がある以上、SJISをデフォルトに考えているわけではない Linux上などで表示させる事は不可能なのでしょうか? (Windowsも独自のSJISだし・・・) どなたかご教示下さい!

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • 私の結婚式はテーマのない普通の結婚式で、服装指定をしていなかった。
  • 妹は就活パンツスーツのような服装で来たため、私は一式用意したが彼女は激昂した。
  • 私が悪いのか、妹からの結婚祝いもなく4万円もかかった服装一式のせいでモヤモヤしている。
回答を見る