• ベストアンサー

半角カナ文字と特殊文字の変換

半角カナ文字と「丸で囲まれた1」や「はしご高」等の特殊文字を SJISからJISへ、JISからSJISへ変換する方法を調べています。 半角カナはJISにないという記述も見たのですが、 サクラエディタで双方へ変換できるのと、 Outlookへ半角カナで送信したところ文字化けせず(全角になっていましたが) 受信できたこと、「はしご高」は受送信で文字変換されているようなので、 何か方法があるのではないかと調べています。 方法や参考資料を教えていただければと思います。 よろしくお願いいたします。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.6

昼休みにsakuraエディタのソース見てみました♪ JISで検索すると CEditView.h:757: void Command_CODECNV_SJIS2JIS( void ); /* SJIS→JISコード変換 */ とか CEditView.cpp:5619: case F_CODECNV_SJIS2JIS: pCMemory->SJIStoJIS();break; /* SJIS→JISコード変換 */ いうのがすぐ見つかるじゃないですか。 > 思うソースがみつかりませんでした^^; > ヘルプファイルのようなものはみつかったのですが・・・ もうちょっとソースの読み方を身に付けたほうが良いかも。 んで、 void CMemory::SJIStoJIS( void ) { /* SJIS→JIS */ StrSJIStoJIS( &cMem, (unsigned char *)m_pData, m_nDataLen ); ↓ int CMemory::StrSJIStoJIS( CMemory* pcmemDes, unsigned char* pszSrc, int nSrcLen ) { // SJIS→JIS変換 nWorkLen = MemSJIStoJIS( pszWork, nWorkLen ); ↓ /* SJIS→JIS変換 */ long CMemory::MemSJIStoJIS( unsigned char* pszSrc, long nSrcLen ) { // Oct. 3, 2002 genta IBM拡張文字対応 sCode = _mbcjmstojis_ex( pszSrc + i ); で、 /*! @brief 拡張版 SJIS→JIS変換 SJISコードをJISに変換する.その際,JISに対応領域のないIBM拡張文字を NEC選定IBM拡張文字に変換する. Shift_JIS fa40~fc4b の範囲の文字は 8754~879a または ed40~eefc に 散在する文字に変換された後に,JISに変換されます. @param pszSrc [in] 変換する文字列へのポインタ (Shift JIS) @author すい @date 2002.10.03 1文字のみ扱い,変換まで行うように変更 genta */ unsigned short CMemory::_mbcjmstojis_ex( unsigned char* pszSrc ) { が実体ですね。 if( ( *pszSrc == 0x0fa ) || ( *pszSrc == 0x0fb ) || ( ( *pszSrc == 0x0fc ) && ( *(pszSrc+1) <= 0x04b ) ) ) { /* fa40~fc4b の文字である。 */ /* 文字コード変換処理 */ これで切り分けて、ライブラリ関数の_mbcjmstojis で 変換できる部分はそれに任せて そうでない文字は細かくチェックして 変換しているみたいですね。 んじゃあ頑張って読み取ってください♪

Caya
質問者

お礼

回答ありがとうございます。 わざわざ探していただきましてありがとうございました。 おかげさまで、何とか実装できそうです。 ありがとうございました。

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

その他の回答 (5)

  • alphion
  • ベストアンサー率19% (27/136)
回答No.5

>作者さんのHPでソースを探してみてダウンロードしてみたのですが、 >思うソースがみつかりませんでした^^; >ヘルプファイルのようなものはみつかったのですが・・・ ここで、 ssrc_2007-07-08.tar.bz2 を持って行って、7zipで2回解凍すれば

参考URL:
http://sourceforge.net/project/showfiles.php?group_id=12488&package_id=54290&release_id=521658
Caya
質問者

お礼

回答ありがとうございました。 そこにあったのですね。別の部分をダウンロードしていました。 情報ありがとうございました。

Caya
質問者

補足

お礼が遅くなってすみませんでした。 おかげさまで何とか実装できそうです。

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> 半角かなのJISへの変換はできるようになりましたが、SJISへ戻すのがなぜかできません^^; >半角カナをSJIS→JISはできて、 「はしご高」のJIS→SJISはなんとなくできるようになりましたが、 どちらともなぜか逆ができずにいます^^; とりあえず半角カナだけ言うと、 SO/SIを使って表すやりかたなら、SOが出ているかどうかを 覚えておかないといけません。 覚えていたら、8bit目を立てるだけだからそう難しくはないのでは? はしご高は、コードの値が大きいので ふつうに計算式にかけるとオーバーフローが 発生したように記憶しています。 それを調整するか、あるいはコードの変換を テーブルをひく形でやってしまえばいいと思います。 最近作られているコード変換ユーティリティは こっちのテーブルをひく形式の方が主流のような気がします。

Caya
質問者

お礼

お礼が遅くなりました。 回答ありがとうございました。 やはり、計算では限界があるのですね。 サンプルなどを参考に 何とか変換機能を実装できそうです。

全文を見る
すると、全ての回答が全文表示されます。
  • alphion
  • ベストアンサー率19% (27/136)
回答No.3

サクラエディタのソースがどこかに転がっていたと思うので、それを見たほうが早いのでは?

Caya
質問者

お礼

回答ありがとうございます。 作者さんのHPでソースを探してみてダウンロードしてみたのですが、 思うソースがみつかりませんでした^^; ヘルプファイルのようなものはみつかったのですが・・・

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

サクラエディタで双方向に変換できるとか、 Outlookで文字化けしないとかはそれぞれの アプリが入力データに対して「緩めに規則を適用」 しているからです。 厳しく規則を適用すれば、丸数字はJIS(iso-2022-jp)や ShiftJISにはありませんし、 はしご高もそうですから、 illegalなデータとして弾かれます。 ただ、JIS←→SJISのコード変換は計算式で 求められるものなので、 無理やりその計算にかけてしまってその結果を 使っているだけのことです。 今現在どのような手段で変換を行っているのか わかりませんが、 ShiftJISの代わりに、cp932とかWindows-31J というキャラクタセットを指定したり、 JISの代わりにコードページ 51932を使ったりすれば *変換できることも*あります。 残念ながらこちらには cp932とかWindows-31J というのに該当するキャラクタセットはありません。 ISO-2022-JP-MSというのが提案されていたりしますが 一般的ではありません。 Microsoftコードページ932 - Wikipedia http://ja.wikipedia.org/wiki/Windows-31J http://www2d.biglobe.ne.jp/~msyk/software/libiconv-1.9.2-cp932-patch.html ISO-2022-JP-MS - PukiWiki http://legacy-encoding.sourceforge.jp/wiki/index.php?ISO-2022-JP-MS

Caya
質問者

お礼

回答ありがとうございます。 不明確だった部分が理解できました。 使いやすさを求めると規制を緩めた形でする必要があるのですね。 コード変換の計算式があるのですね・・・ 色々探してみて、半角カナをSJIS→JISはできて、 「はしご高」のJIS→SJISはなんとなくできるようになりましたが、 どちらともなぜか逆ができずにいます^^;

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> 半角カナはJISにない そんなことはありません。 > 方法や参考資料を教えていただければと思います。 専用のエスケープシーケンスまたはSO/SIを使用します。

参考URL:
http://mikeneko.creator.club.ne.jp/~lab/kcode/hankana.html
Caya
質問者

お礼

回答ありがとうございます。 エスケープシーケンスが別に用意されているのですね。 色々と試してみて、半角かなのJISへの変換はできるようになりましたが、SJISへ戻すのがなぜかできません^^;

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

関連するQ&A

  • eval 半角カナが文字化けする

    初めて投稿させていただきます。 半角カナが混ざっている文字列をevalすると、文字化けする場合があります。 どうすれば文字化けしないようになりますか? ちなみに全ての半角カナを全角カナに置換してevalを行いその後、半角カナに戻すということをやったのですが、もともと全角カナ文字まで半角カナに変換されてしまいました。できれば全角カナは全角カナ、半角カナは半角カナのまま文字化けせずにevalする方法を教えてください。

    • 締切済み
    • PHP
  • エクセル2003でセル内の文字のうち、半角カナ文字だけを全角かなに変換

    エクセル2003でセル内の文字のうち、半角カナ文字だけを全角かなに変換する方法 数字や英文字は半角のまま残して、読みにくい半角カナだけを全角かなに変える方法はあるでしょうか? JIS()ですと、すべての文字が全角に変わってしまいます。 詳しい方、どうかよろしくお願い致します。

  • Excelで半角カナのみを全角に変換したい

    EXCELで、半角カナのみを全角に変換する方法はありますか? JISという関数がありますが、これは英数まで全角に変換されてしまいます。

  • Jcode.pmでの半角カナ→全角カナ変換

    Webフォームから取得したデータに半角カナが含まれていた場合の文字化け対策として、Jcode.pmを使用して、下記のようにEUCに変換しています。 use Jcode; $euc_string = jcode($form_input)->h2z->euc; 原理的には間違ってはいない筈ですが、ほとんどの場合、$form_inputの文字コードの判別に失敗(恐らく半角カナをEUCと誤認)し、文字化けしてしまいます。誤認しないように、下記の様に記述すれば、正しく全角カナに変換してくれます。 use Jcode; $euc_string = jcode($form_input,"sjis")->h2z->euc; ただ、入力コードがシフトJISとは限りませんので、この記述は好ましくないと思っています。 半角カナの文字化けは、webフォームを作られた方なら皆さん経験されていると思うのですが、どうされているのでしょうか? Jcode.pmの文字コード判別は、半角カナが混じっていた場合、かなり長い文字列でないと判別に失敗するようなので、フォームで短い文字列(名前等)を入力させて処理させた場合、ほとんど上手く動かないようなのですが?

    • ベストアンサー
    • Perl
  • 半角カナに悩まされております・・・。

    こんばんは! 度々質問させて頂いておりますイインンフォフォと申します。 さて早速質問に移ります。 DBより半角カナの抽出は出来たのですが更新をした場合に文字化けになります。 ピーナッツと言う半角カナのカテゴリがありそこにある情報を取得→更新と言う形です。 全角にしたらいいと言うご意見もあるかと思います。 全角にすると別なプログラムも狂ってしまうので半角でしかダメみたいです。 ピーナッツを抽出→表示 はOKです。 でも内容を更新すると→[ピーナッツ]が文字化けです。 フォームのプルダウンメニューから cate='$pr[4]' と言う形でインサート及び更新をしています。 抽出の時点では半角カナで表示されていて更新作業をすると化けてしまいます。 文字化けした場合、管理画面からカテゴリの訂正をしなければなりません。 DB→EUC-JP PHPファイル→SJIS となっております。 なぜでしょうか!! ご教授願います(*^-^*)

    • ベストアンサー
    • PHP
  • 半角カナ文字の変換

    半角カナ文字(濁点あり)の全角カナ文字への変換がうまくいかなくて悩んでいます。 現在、 HashTable.put("ア","ア"); HashTable.put("ン","ン"); このような感じで変換テーブルを作成し、 String strVal = "半角カナ文字"; for(int i = 0; i < strVal.length(); i++){   char c = strVal.charAt(i); if(HashTable.containsKey(c)){ strTmp.append(HashTable.get(c)); } } このような処理をしているのですが、 半角カナ+濁点(例えば、ガ)の変換が、 「カ゛」となってしまいます。 これを「ガ」とするにはどうすればよいでしょうか?? 何か良い方法がありましたら教えてください。 お願いします。

  • 半角カナを全角カナに変換したい

    表題の通りです。 先輩から引き継いだエクセルのデータが、全角カナと半角カナとの両方を、使い分けなどではなく使用しているものだったので、半角カナを全部、全角カナに変換したいと考えています。 置換機能で50音全部を置換するのは大変ですので、一度に変換する良い方法があれば教えてください。 また、全角アルファベットを、普通の英字(半角アルファベット?)にも変換したいと思っています。

  • 英数文字を半角に、カナを全角に変換したい(Excel関数)

    Excel関数で、英数カナ文字混在したセルに対して 英数は半角に、カナ文字は全角に変換したいのですが なにかいい方法はないでしょうか? JIS関数、ASC関数では上手くできません。 当方はエクセル駆け出しです。VBAとかを使えば上手くいくのでしょうか?よろしくご教授願います。

  • 半角カナの使用について

    以前はメールやホームページで半角カナを使うと文字化けしたりしましたが、今は使われることが多くなっているように思えます。 実際のところどうなんでしょう。 自分に半角カナを入れたメールを送ると全角カナに変換されています。 ローカルディスクに半角カナをいれたHTMLファイルを作り、ブラウザで見るとそのまま半角カナで表示されます。 まだ使うと不具合が出たりするんでしょうか。 それとも使えるようになったんでしょうか。

  • 半角カナならば(Excel)

    Excelで、A1にある文字列の中の各文字を次の条件で変換するためにB1に数式を設定する場合、 (1)半角カナは全角カナに変換 (2)半角カナでない文字はそのまま(何も変換しない) B1に設定する数式は以下のようなものが考えられると思われますが、 =LET(x,MID(A1,SEQUENCE(LEN(A1)),1), CONCAT(IF(・・・, JIS(x), x))) この・・・にくる「半角カナならば」の条件が思い浮かばないのですが、お分かりの方いらっしゃったら教えていただけますか。

このQ&Aのポイント
  • パソコンと接続せずにキヤノン製品を使ってコピーする方法はありますか?
  • キヤノン製品をコピー専用で使用する方法について知りたいです。
  • パソコンを使わずにキヤノン製品でコピーを取る方法を教えてください。
回答を見る

専門家に質問してみよう