SFU3.5のiconvコマンドで文字コード変換(EUC->SJIS)すると'-'が'_'に誤変換されてしまう

このQ&Aのポイント
  • SFU3.5のiconvコマンドを使用してEUCからSJISに文字コードを変換する際、'-'が'_'に誤変換される問題が発生しています。
  • コマンドを実行して変換後のファイルを参照すると、'-'が'_'になっていることが確認できます。
  • 問題の原因として、指定した文字コードの設定が間違っている可能性が考えられます。正しい文字コードを指定するか、他の方法で変換を試してみてください。
回答を見る
  • ベストアンサー

SFU3.5のiconvコマンドで文字コード変換(EUC->SJIS)すると'-'が'_'に誤変換されてしまう

OS:Windows Server 2003 SFUバージョン:Microsoft Windows Services for UNIX 3.5 ファイルの文字コードをEUCからSJISに変換するため以下コマンドを実行しました。 >iconv -f 20932 -t 932 EUC_FILE.txt > SJIS_FILE.txt この後、変換後のSJIS_FILE.txtを参照すると、ほとんど問題ないのですが一点だけ問題があり、'-'が'_'に誤変換されていました。 例を挙げると、以下のような誤変換です。 ○ スウェ-デン輸出信用銀行 × スウェ_デン輸出信用銀行 もしかすると、EUC=20932,SJIS=932と指定しましたが、このコードが間違っているのでしょうか?参考までにコードのリストを以下に出力します。(明らかに関係なさそうな出力は文字数節約のため削除します。) >iconv -l 10001 (MAC - 日本語) 1146 (IBM EBCDIC - 英国 (20285 + ユーロ)) 20127 (US-ASCII) 20261 (T.61) 20269 (ISO 6937 Non-Spacing Accent) 20290 (IBM EBCDIC - 日本語 カタカナ拡張) 20932 (JIS X 0208-1990 & 0212-1990) 20936 (簡体字中国語 GB2312) 21027 (Ext Alpha Lowercase) 437 (OEM - 米国) 500 (IBM EBCDIC - インターナショナル) 50220 (ISO-2022 日本語、半角カタカナなし) 50221 (ISO-2022 日本語、半角カタカナ) 50222 (ISO-2022 日本語 JIS X 0201-1989) 932 (ANSI/OEM - 日本語 Shift-JIS) 936 (ANSI/OEM - 簡体字中国語 GBK) 949 (ANSI/OEM - 韓国語) 950 (ANSI/OEM - 繁体字中国語 Big5) 54936 (GB18030 簡体字中国語) 28603 (ISO 8859-13 ラテン 7) 65000 (UTF-7) 65001 (UTF-8) 以上、解決策などご存知の方どうぞご教授のほど、よろしくお願いいたします。

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

  • ベストアンサー
  • rioworks
  • ベストアンサー率41% (19/46)
回答No.1

>EUC=20932,SJIS=932 20932ではなくて、51932でやってもダメでしょうか? 932 Japanese (Shift-JIS) 日本語 Shift_JIS 20932 windows-20932-2000 51932 Japanese (EUC) 日本語 (EUC) EUC-JP 2つ目のURLでは、EUC-JP ⇒ ISO-2022-JP ⇒ Shift-JIS という方法を薦めてますが・・・。 日立東日本:Windowsコードページ一覧 http://www.hitachi-to.co.jp/prod/prod_2/inter/emk/help/TextEncoder/CodePage.htm 20932と51932についての「CP20932 は MS 版“日本語EUC”ではない。」って書いてるWebサイトもあって、私自身が少々混乱。 システム管理な雑記:メモ: CP20932 と CP51932 の件、続き (伊原さん、 umq さん、長谷川さんのメモ) http://blogs.sqlpassj.org/yamaken/archive/2004/08/27/3908.aspx

参考URL:
http://www.hitachi-to.co.jp/prod/prod_2/inter/emk/help/TextEncoder/CodePage.htm
yamadango
質問者

お礼

iconvとは別のnkfというツールを使い問題を解決できました。 回答のほう、たいへん参考になりました。 どうもありがとうございました。

yamadango
質問者

補足

回答ありがとうございます。 51932で実行したところ、 「Input Code Page support is not installed」 とエラー終了してしまいました。 別途何かをインストールが必要なのでしょうか?

関連するQ&A

  • 文字コード(EUC->SJIS)についての質問です

    どこに質問して良いのか判断しかねましたので、 今回の開発環境であるVBのカテゴリで質問させていただきます。 さて早速質問ですが、EUC->SJISについてです。 現在あるフリーの.DLLを使ってコード変換をしているのですが、 ある特定の場合に限り、自分の期待通りの結果を返してくれません。 例えば以下のような場合(説明のためアレンジして抜粋)です。 ------------------------------------------------------------------ Dim Euc(6) As Byte Dim Sjis() As Byte Dim szSjis As Integer 'Sjis()のサイズ Euc(0) = 13 Euc(1) = 10 Euc(2) = 13 Euc(3) = 0 Euc(4) = 46 Euc(5) = 0 szSjis = Euc2Sjis(Euc(), Sjis()) '今回使用しているDLL内の関数 ------------------------------------------------------------------ この結果、変換後の値は以下のようになります。 szSjis → 3 Sjis(0) → 13 Sjis(1) → 10 Sjis(2) → 13 このようになり後半が無視されてしまっているような気がするのです。 私が期待している結果としては、46(&H2E)の"."が残ってほしいのですが…。 Euc(4)=0やEuc(6)=0がなにか悪さをしているのでしょうか? 日本語文字コードの知識に乏しいので、的外れな質問かもしれませんが、 このような分野にお詳しい方がいらっしゃいましたら、 どうかアドバイスよろしくお願いします。

  • iconv変換後のサイズについて

    iconvを使いEUC→JISという変換を行いたいのですが 変換前後でサイズは変わらないのでしょうか。 (作ってみればわかるとは思いますが・・・) よろしくお願いします。

  • EUCからSJISに上手く変換できない

    以下のような関数でEUCからSJISに変換しているのですが、 「渕」という字が文字化けしてしまいます。 どんなふうに修正したらいいか、教えて下さい。 【関数】 void euc2sjis(BYTE *code1, BYTE *code2) {   if (*code1 & 0x01) {     *code1 >>= 1;     if (*code1 < 0x6F)       *code1 += 0x31;     else       *code1 += 0x71;     if (*code2 > 0xDF)       *code2 -= 0x60;     else       *code2 -= 0x61;    } else {     *code1 >>= 1;     if (*code1 < 0x6F)       *code1 += 0x30;     else       *code1 += 0x70;     *code2 -= 0x02;    } } 【補足】 「渕」は、EUCではDEB0      SJISでは9FAEだと思います。

  • centos5にてiconvコマンド

    いつもお世話になっております。 すみません。 centos5にて、utf8のファイルをeucjpにiconvで変換しようとしていますが、 下記のコマンド実行後、eucではなく、ISO-8859になってしまいます。 こちら、バグなのでしょうか。 お手数をおかけしますが、ご存知の方、ご教授いただけると助かります。。 [foo@localhost ~]$ file /tmp/in.dat /tmp/in.dat: UTF-8 Unicode text [foo@localhost ~]$ iconv -f utf8 -t eucjp < /tmp/in.dat > /tmp/in.euc.dat [foo@localhost ~]$ file /tmp/in.euc.dat /tmp/in.euc.dat: ISO-8859 text [foo@localhost ~]$ iconv --list | grep UTF ISO-10646/UTF-8/ ISO-10646/UTF8/ UTF-7// UTF-8// UTF-16// UTF-16BE// UTF-16LE// UTF-32// UTF-32BE// UTF-32LE// UTF7// UTF8// UTF16// UTF16BE// UTF16LE// UTF32// UTF32BE// UTF32LE// [foo@localhost ~]$ iconv --list | grep EUC CSEUCKR// CSEUCPKDFMTJAPANESE// EUC-CN// EUC-JISX0213// EUC-JP-MS// EUC-JP// EUC-KR// EUC-TW// EUCCN// EUCJP-MS// EUCJP-OPEN// EUCJP-WIN// EUCJP// EUCKR// EUCTW//

  • 文字コード変換

    SJISで取得したダブルバイト(日本語)の文字列を EUCで表示したいのですが どのようにすればSJISの文字列をEUCの文字列に変換することができるのでしょうか?

    • 締切済み
    • PHP
  • PHP+MySQLでSJISからEUCへの文字コード変換方法を教えてください。

    こんにちは。いつもお世話になっております。本来であれば自サーバーで検証してから質問すべきだとは思いますが、現在稼動中のサーバーしかなく、止めることができないので質問させていただきます。 現在、PHP+MySQLでサイトをSJISコードで運営しておりますが、「表」「能」等のSJISの文字化け対策が面倒になってきまして、EUCに変換してしまおうかと検討しております。 現状の日本語に関する設定は下記のようになっております。 ▼MySQL(my.cnf) バージョン:4.1.20 [mysqld] default-character-set=sjis init_connect="SET NAMES sjis" [mysql.server] default-character-set=sjis [mysqldump] default-character-set=sjis [mysql] default-character-set=sjis ▼PHP(php.ini) バージョン:4.3.9 mbstring.internal_encoding = SJIS mbstring.http_input = pass mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto PHP内でMySQLと接続した直後に次のようにSJISを指定しています。 $sql="SET NAMES sjis"; mysql_query($sql); ちなみに、MySQLはMySQLadminで管理しておりますが、テーブルの照合順序は全てsjis_japanese_ciになっています。 上記のような内容ですが、この場合SJISからEUCに変換する場合の手順として、下記の流れでよろしいでしょうか? 1.PHPファイルをEUCコードに変換。 2.php.iniのSJISの部分をEUCに変換。 3.MySQLの設定ファイルのsjisの部分をujisに変換。 4.MySQLのテーブル内のデータを全てエクスポートして、外部エディタでEUCに変換後インポートする。 特に上記4の作業はテーブル数及びデータが膨大なため結構な作業になってしまいそうです。 もしもっと楽な方法があればご教授いただければ幸いです。なお、サーバーはRed Hat Enterprise Linuxです。

    • ベストアンサー
    • PHP
  • phpでの文字コード変換について

    phpでの既存ソース解析を行っている者ですが 文字コードに苦戦しております。 関数でEBCDICからASCII・ASCIIからEBCDICの変換と EUCからJIS8・JIS8からEUCの変換を行っているのですが mb_convert_encoding("XXX","XXX","XXX")では ダメなのでしょうか?? 文字コード自体の理解が浅いのが原因でもありますが どなたか参考URL等ありましたら教えてください。 (一応大体のサイトは拝見しましたが・・・)

  • iconv_openで「II」(ギリシャ文字)を変換できない

    Linux 上で以下のようなプログラム(文字コードのEUC/SJIS変換)を実行すると「II」が変換できず(正確にはNULLになってしまう。)に文字列が破壊されてしまいます。 実際使用するデータの中には「II」が存在するので、この文字(ギリシャ文字全部?その他にもありますかね?)を使用不可とするのは難しいので、上手く変換できるようにしたいのですが、iconv_openの代わりになる関数(あるいは上手く変換させる方法)ってありませんか? #include <stdlib.h> #include <iconv.h> int main(int ac,char **av){ int desc = 0; char r[512]; char w[512]; char *rr; char *ww; rr = r; ww = w; int a,b; a = 256; b = 256; if((desc = iconv_open( "SHIFT-JIS", "EUC-JP" )) != -1){ strcpy(r,"aIIa\n"); iconv(desc,&rr,&a,&ww,&b); printf("%s\n",w); } }

  • 中国語が文字コード変換で、一部文字化けする。

    PHPとMySQLで中国語のサイトを作っているのですが、データベースから読み出した文字列が、GB2312に変換後一部の文字だけ「?」になってしまいます。 このサイトでは中国語以外に、既に日英のサイトがあってそれらは、 日:WEB = SJIS / DB = EUC 英 : WEB = UTF-8 / DB = EUC 中 : WEB = GB2312 / DB = EUC という構成になっています。 ちなみに管理者画面では、日、英、中、全てのコンテンツを編集できるようになっていて、文字コードは、shift-jisにしてあります。 ですので、中国語のコンテンツを書き出すときは、 管理者画面:shift-jis ↓ PHP処理:EUCに変換 ↓ DB:EUCで登録 ↓ DB:EUC ↓ PHP処理:GB2312に変換 ↓ HTMLに書き出し という流れになっています。 中国語のサイトを作られている方は少ないと思いますが、分かる範囲でアドバイスをいただければと思います。よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 中国語簡体字コードから日本語コードへの一括変換

    中国語簡体字(GB)コードでかかれた複数のテキストファイルを日本語コード(SJISかUTF16)に変換するツール(または方法)があれば教えてください 環境はWindowsXPですが、Linuxも使用可能です。