
utf-8のLinuxマシンで、sjis(改行コードCR+LF)のデータファイルを読込み、euc-jp(改行コードLF)でファイルに出力したいのですが、どのようにすればよいでしょうか。プログラム実行前後に入出力ファイルを直接コード変換することは考えておらず、全て一つのプログラム内でやりたいと考えています。
&jcode'convertで変換するのかなと思っているのですが、読込み時・書き込み時のどちらでやるべきなのか、あるいは両方やるべきなのか分かりません。データには、「・」「I,II」などの特殊文字(?)が含まれているので、それらの文字で問題が起きないかなどもちょっと心配です。
また、&jcode'convertでeucに変換すれば、改行コードも一緒にCR+LFからLFに変換されるものでしょうか。
文字コードのことがよく分かっていないので、的外れな質問になっているかもしれませんが、ご教示願います。
No.1ベストアンサー
- 回答日時:
perl プログラムを UTF-8 で書くなど、
内部コードを UTF-8 とするなら、入力時に UTF-8 に変換し、
出力時には UTF-8 から外部コードに変換することになります。
jcode'convert で変換してもよいですが、
Encode モジュールを使って明示的に変換するなら
use utf8;
use Encode;
while( my $line = <> ) {
$line =~ s/\x0D\x0A$//xms;
my $utf8_line = decode('CP932', $line);
# anything to do
print encode('EUC-JP', $utf8_line), "\n";
}
みたいな感じだし、PerlIO による自動変換を行うのなら
use utf8;
binmode STDOUT, ":encoding(EUC-JP)";
binmode STDIN, ":encoding(CP932)";
while(my $line = <>) {
$line =~ s/\x0D\x0A$//xms;
# anything to do
print $line, "\n";
}
みたいな感じです。
文字コードの変換と改行コードの変換は別物なので上の例や
jcode'convert では改行コードは自動的には変換されません。
なお jcode'convert はかなり古い書き方になるため、使用されている
jcode.pl は UTF-8 には対応していないかもしれません。
Jcode::convert(Jcode.pm) または Encode を使用された方が
よいと思います。
また、中黒「・」やローマ数字「I」、「II」などでは問題は起きませんが、
外字である「かっこ株」や「まる1」などは正しく変換されません。
分かりやすくご説明していただきありがとうございます。
t-okuraさんが書かれていたEncodeモジュールについて
自分でも調べてみました。
5.8からはこんなに便利なものがあるんですね。
家には実行環境がないので、明日試してみます。
本当にありがとうございました。
No.2
- 回答日時:
「utf-8のLinuxマシンで、sjis(改行コードCR+LF)のデータファイルを読込み、euc-jp(改行コードLF)でファイルに出力したい」
という要件を満たすためなら、nkf を使うのが、最も簡単かと思います。
コマンドラインから、
$ nkf --version
と実行して、バージョンが表示されれば、nkf を使うことができます。
以下のように実行すれば、
sjis(改行コードCR+LF)のデータファイルを読込んで、
euc-jp(改行コードLF)で出力します。
$ nkf -SeLu data.txt > data_new.txt
元のファイルを残さずに上書きするなら、
$ nkf -SeLu --overwrite data.txt
ってな感じで。
具体的なコマンドイメージまで書いて下さいましてありがとうございます。
Linux初心者の私にとってはとても助かります。
nkfについて自分でも調べてみました。
Luオプションをつけると、改行コードも変更してくれるんですね。
文字コードに翻弄され、なかなかプログラミングが進まなかったのですが、これで先に進めそうです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- その他(プログラミング・Web制作) 改行コードについて 4 2022/08/13 14:20
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現
-
Perlでのマッチング処理について
-
「数値文字参照への変換するソ...
-
文字化けの事で?
-
住宅にカナを入力する際に丁目...
-
テキストエリアの改行を変換(...
-
URL末のスペースを削除したいの...
-
CSVファイルの中で、「 , 」カ...
-
初めてのAIプログラミング C言...
-
Perlで一行で文字列の置き換え
-
1つのセルに1つ以上のデータ...
-
掲示板の管理者画面でログイン...
-
タグを正規表現で完全に削除
-
このHPのアドレスバーの区切り...
-
複数行に渡る文字列の置換
-
ダブルクォーテーション置換時...
-
VBAでの全角数字と半角数字の判...
-
/ [ 【 の文字をマッチさ...
-
ファイル名の右側を変更したい ...
-
Perlでの文字列置換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
InputMan の imTextについて
-
文字実体参照が勝手に変換され...
-
チェックボックスの複数選択の...
-
もっとも初歩的なデータの渡し方を
-
常用漢字?でない文字を判定す...
-
機種依存文字の文字コード変換
-
色の指定
-
formデータのデコード「s///」...
-
半角と全角の文字数カウント方法
-
Perlの初歩
-
正規表現でカンマを対象にする方法
-
特殊文字をPOSTした際の動作は?
-
次ページ処理で途中つまりました
-
文字化けを回避したい
-
ダブルクォート文字などをフォ...
-
index関数と英語文字
-
nkfとjcodeの使い方の違いについて
-
SJISに関する少々複雑な問題
-
パターンマッチ変換について
-
戻り値の意味がわかりません…
おすすめ情報