• 締切済み

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

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

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

iconvはしらないけど、サイズは変換する文字列によって変わりますね。 各文字コードの性質としては EUC-JPは ・ASCIIは1バイト ・JIS第一水準、第二水準は2バイト ・半角カナは2バイト ・JIS補助漢字は3バイト JIS(ISO2022JP)は ・ASCII、半角カナは1バイト ・JIS第一水準、第二水準、補助漢字は2バイト ・1バイト、2バイトの切り替えにESCシーケンスを使う こんなところです。元の文字列で使っている文字によって大きくも小さくもなります。

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

うろ覚えの記憶に頼って回答するので、間違っているかもしれませんが、EUC→JISの変換を行うと、シフトシーケンスの分だけサイズが増えたと思います。 > (作ってみればわかるとは思いますが・・・) その方が確実です。

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

関連するQ&A

  • iconvでSJIS→UTF-8に変換できない文字

    cygwin1.7.31 の iconv を使って50個程度のShift-JISのcsvファイルをUTF-8に 一斉に変換しようとしていますが、 レコード内に「(1)」という文字があるためか、出力が止まってしまいました。 このような文字を含む場合も変換する方法がございましたらご教示ください。 お願いします。 入力したコマンドは次の通りです。 iconv -f Shift_JIS -t UTF-8 abc.csv > test.csv エラーメッセージ iconv: abc.csv:36:30: cannot convert

  • 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); } }

  • iconv_open失敗

    いつもお世話になっております。 OpenIndiana NetBeansIDE 7.1でc++のプログラミングをしているのですが、下記コードで SHIFT-JISを指定すると iconv open: Invalid argument となってしまいます。 SHIFT-JISの文字コード関係の何かのインストール等が不足しているのでしょうか。 locale -a というコマンドを実行してみたのですが、 UTF-8に関係しそうなものは入っていたのですが、SHIFT-JIS(PCK?) のようなものは入ってなさそうでした。 どなたかご教授よろしくお願いいたします。 どなたかご教授よろしくお願いいたします。 int main(int argc, char** argv) { int ret; // ret = convert("UTF-8", "EUC-JP",//成功 // ret = convert("UTF-8", "SHIFT_JIS", ret = convert("UTF-8", "SHIFT-JIS", "日本語テストメッセージおはよう", outbuf, sizeof(outbuf)); if (ret) { printf("%s\n", outbuf); } else { printf("Oops!\n"); } return 0; } int convert(char const *src, char const *dest, char const *text, char *buf, size_t bufsize) { iconv_t cd; size_t srclen, destlen; size_t ret; cd = iconv_open(dest, src); if (cd == (iconv_t)-1) { perror("iconv open"); return 0; } srclen = strlen(text); destlen = bufsize - 1; memset(buf, '\0', bufsize); ret = iconv(cd, &text, &srclen, &buf, &destlen); if (ret == -1) { perror("iconv"); return 0; } iconv_close(cd); return 1; }

  • HP-UXにてiconv変換できません。

    いつもお世話になっています。 当方、C言語初心者です。 環境 HP-UX 11.23 言語 C言語 他システムより接続された漢字コードに制御コードを付与し、JISコードに変更後、 JIS→SJISに変換するツールを開発しています。 たとえば 他システムより 0x3E3E 0x3B33(コードを調べると〔松山〕でした) 前後に制御コード付与すると 0x1B 0x24 0x42 0x3E3E 0x3B33 0x1B 0x28 0x4A JISで松山になります。 エディタで上記コードを読み込むと松山と表示されました。 ところが上記のJISを下記内容で実行させると、 入力値のコードがなんの変換もされず返却されました。 どこに不具合があって入力の内容(cvbuf)が出力の内容(ebuf)にそのまま返却されているのか調べることができませんでした。 何か見落としがあればご指摘のほど、宜しくお願い致します。 ※rlenをprintfしたところ正常返却されています。 ======================================================================= 呼び元は  cvkanj(0x3E3E 0x3B33の内容が入ったアドレス,2)  みないな感じです。 char *cvkanj(s, len) char *s; int *len; { char cvbuf[32768]; int rcd; staric char ebuf[32768] = {0}; static char ki[4] = { 0x1b, 0x24, 0x42, 0x00}; static char ko[4] = { 0x1b, 0x28, 0x4a, 0x00}; memcpy( cvbuf, ki, 3); memcpy( &cvbuf[3], s, len) memcpy( &cvbuf[len+3], ko, 3); cvbuf[len+6] = 0x00; rcd = convt(cvbuf, ebuf); return(&ebuf[0]); } int convt(pin, pout) char *pin; char *pout { iconv_t cd; size_t ilen; size_t olen; size_t rlen; ilen=strlen(pin); olen=32768; if ((cd = iconv_open("jis","sjis")) == (iconv_t)-1){ exit(-1); } rlen = iconv(cd, &pin, &ilen, &pout, &olen); iconv_close; return(0); }

  • ファイルiconvについて

    UNIXのコード・セット間での文字の変換ファイルiconvの 標準形式iconv( iconv_t cd, const char **inbuf, size_t *inbytesleft,char **outbuf, size_t *outbytesleft ); の第二引数は”const”ない場合、どんな影響及ぼしますか?ご教授ください。

  • gccでiconvを使った文字コード変換で文字化け?

    Linuxでgccを使ってプログラムを作っていますが、文字コード変換が一部分うまくいかなくて困ってます。 Shift-JISで作られたテキストファイルから一行ずつ文字を読み込んで、 それをUTF-8に変換して画面に出力しているんですが、 「神石高原町」だけ文字化けしているのか、表示されません。 前後の行は表示されるのでちょうど1行空白になる感じです。 とりあえず変換用に作った関数。 BOOL SJIStoUTF( char* pin, // (IN) 変換元文字列 char* pout, // (OUT) 変換後文字列格納領域 size_t olen) // (IN) 変換後文字列格納領域サイズ { iconv_t cd; size_t ilen, rlen; cd = iconv_open( "UTF-8", "SJIS-WIN" ); ilen = strlen( pin ); rlen = iconv(cd, &pin, &ilen, &pout, &olen ); if( rlen == -1 ){ printf( "ERROR in S2U (%s)\n", pin ); return FALSE; } *pout = '\0'; iconv_close( cd ); return TRUE; } この関数に「神石高原町」を与えて返ってきた文字をファイルに出力して、 秀丸の文字コードUTF-8で開くと変換できなかった文字が「神」の前にあり、文字も「神石高原」になるし・・・。 Linuxのコンソール上でiconvのコマンド使ってファイルごと変換すれば 文字化けしないんですけど、 gccでiconv使うときは気をつけなきゃだめなことがあるんでしょうか? なんでこうなるのかわかる方がいたら教えてください。

  • ファイルの変換についての質問(iconv)

    ファイルの文字コードを変換したいということですので、 ファイルの文字コードは、shift-jisからBomがつくUTF-8ファイルに変換 するつもりです。 現在使っているソフトは GNU の iconvです。 OSはWindowsXpです。 どうやってMS-DOSからファイルをBomが付くUTF-8のファイルにします? なんの設定する必要がありますか?

  • 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//

  • c言語 iconv

    msys環境で実行して,指定されたファイルの文字コードをShift-JISに変換して表示するコードを作成しているのですがうまく表示されません.何がいけないのでしょうか.第1引数に変換対象のファイル名,第2引数にファイルの文字コードを指定しています. #include <stdio.h> #include <string.h> #include <iconv.h> int main(int argc, char *argv[]) { iconv_t conv; char src[10000]; char dst[10000]; int src_len = strlen(src); int dst_len = sizeof(dst) - 1; char *buf_in; char *buf_out; FILE *fp; fp = fopen(argv[1], "r"); if(NULL == fp) { printf("ファイルを開けません\n"); } else { while(fgets(src, 10000, fp) != NULL) { buf_in = src; buf_out = dst; /* 変換器を作成 */ conv = iconv_open("Shift-JIS", argv[2]); /* 変換 */ iconv(conv, &buf_in, &src_len, &buf_out, &dst_len); *buf_out = '\0'; /* 終末処理 */ /* 文字コード後の文字列を表示 */ printf("%s\n", dst); } /* 変換器を終了 */ iconv_close(conv); /*ファイルを閉じる*/ fclose(fp); } return 0; }

  • 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) 以上、解決策などご存知の方どうぞご教授のほど、よろしくお願いいたします。