- 締切済み
特定文字での文字化け
DB(oracle)から抽出したものをPerl5でcsv出力しているのですが、特定文字で文字化けが起こってしまいます。 特定文字というのが、シフトJISの「拡張文字」と言われているものにあたるらしく、 0xED40~0xED9Eとか0xFA40~0xFA9Eとかです。 0xED40→ス、0xED9E→シ、0xFA40→。、0xFA9E→.となってしまいます。(文字を出したかったのですが、表示されなかったので文字コードにしました。) $strをDBより抽出した文字列として jcode::convert( \$str, "euc" ); : :(文字列の区切り処理) : jcode::convert( \$str, "sjis" ); ということをやっています。 以前、 &jcode'convert( $str, "euc" ); : :(文字列の区切り処理) : &jcode'convert( $str, "sjis" ); とやっていたのですが、この場合、 「半角カナ+文字コードが7cを含む文字」 が文字化けを起こしていました。 これを修正するために前者のような修正をしたのですが、 間違っているのでしょうか? すみませんが、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- moon_piyo
- ベストアンサー率60% (88/146)
あの~(文字列の区切り処理)はeucに変換しないと不具合がおこるのでしょうか? 変換は行わずに,そちらのほうを注意深く行うことで回避はできませんか?
- moon_night
- ベストアンサー率32% (598/1831)
文字列を扱うときはEUCが基本で。 SJISだといろいろ不都合が出てくるので。 まぁ、表示(表が文字化け対象文字)とかならば 表\示と¥マークをはさんでエスケープをすれば大丈夫になりますが。 (多分拡張文字も同じ対処でいけるかも) でも、正確に文字列を扱いたい場合はEUCにするほうがいいと思います。 どうしてもSJISで扱いたい場合は\でエスケープする。