![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
(昨今の)Perlには「utf8フラグ」なるものがあります。
通常、日本語の仮名や漢字は、複数の文字を組み合わせて表現しています。
例えば、「ア」という文字は
Shift_JISなら \x83\x41 という「2文字」
UTF-8なら \xE3\x82\xA2 という「3文字」
です。
この状態は、1バイト1バイトの文字が並んでいる状態なので、「バイト列」と呼ぶことにします。(バイナリと呼んだりもします)
ファイルには、この形で入っています。
この方式だと、「ア」が1文字として扱われずいろいろと不便です。
例えば、 Shift_JISのアに含まれる \x41 はASCIIコードでのAです。
ここで、s/A/B/ とすると、 AがBに書き変わるだけでなく、ア( \x83\x41)がィ (\x83\x42)に書き変わってしまいます。
そこで、これらを統一扱う「内部形式」というのを作りました。
それが「utf8フラグ付き文字列」です。
読み込み時は
ファイルや文字列変数でのバイト列 → 復号( decode ) → 内部形式(utf8フラグ付き文字列)
書き出し時には
内部形式 → 符号(encode) → ファイルや文字列変数でのバイト列
とすることで、内部形式では「ア」を一文字として扱うことができます。s/A/B/としてもアには影響ありません。
復号/符号 は入出力時に自動で行なうようにしたり、Encodeモジュールのdecode,encode等を使用して明示的に行なったりします。
この書き出しの時に、
内部形式 → 符号(encode) → ファイルや文字列変数でのバイト列
としなければならないところを
内部形式 → ファイルや文字列変数
と直接おこなってしまった場合、そんなことはできない、と発生するのが「 wide character 〜」の警告です。
対処法は、 上記のようにencodeすることです。
また、場合によっては decode を抑制して 最初からバイト列で扱う方が正しいこともあります。
具体的なことは、実際のコードとやろうとしていることがわかならないと答えられません。
とても丁寧なご教示有難うございます。
shift-jisで処理していますので、最初に、
Encode::from_to($content, "shift-jis", "euc-jp");
と書き込み、データ出力前に
Encode::from_to($content, "euc-jp", "shift-jis");
と言うような形で対応するのでしょうか?
重ねてご教示頂けましたら有難く存じます。
No.3
- 回答日時:
$content が utf-8 フラグのついた文字列である場合,
Encode::from_to($content, "utf-8", "shift-jis");
は
$content = Encode::encode($content, "shift-jis");
と同じになります (個人的に from_to は使ってないのでちょっと違うかもしれん).
最後の
「エラーメッセージはあっても関係ない、
ということでしょうか」
は, 何を聞いているんでしょうか?
有難うございます。
$content = Encode::encode($content, "shift-jis");
を入れてみます。
No.2
- 回答日時:
そうとう昔の Perl から内部的には UTF-8 を使うので
1. 外から与えられた文字列は Encode::decode で UTF-8 に変換する
2. その UTF-8 な文字列を使って処理をする
3. 外に出すときに Encode::encode でそれなりな文字コードに戻す
とするんだよ... と #1 はいっている.
有難うございます。
Encode::encode でそれなりな文字コードに戻って帰って来る
ということですか。
Encode:from_to($content,"utf-8","shift-jis");
としなくてもよい、ということですか。
エラーメッセージはあっても関係ない、
ということでしょうか。
もう少し教えて頂けるとありがたいのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby pythonエラー 4 2022/11/11 19:12
- その他(プログラミング・Web制作) invalid character in identifier 2 2022/07/18 10:14
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- MySQL MYSQL エラー 2 2022/10/18 11:37
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Ruby 教えてください 2 2023/01/04 17:50
- PHP php エラー 2 2022/10/23 16:43
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Can't use string (0") as an ARRAY ref の原因について"
Perl
-
Perlスクリプトで文字化けしてしまう
Perl
-
CPANでインストールしたモジュールの削除方法
ネットワーク
-
-
4
特定の文字列を削除
Perl
-
5
apacheでPerl CGIが作動せず、500エラーが出ます。
CGI
-
6
全角ひらがな、漢字をマッチさせたい
Perl
-
7
Perlで Right関数に近い処理をさせたいのですが、何か良い方法は無いでしょうか?
Perl
-
8
Perlの初心者です。2重ループの方法で困ってます。
Perl
-
9
上位階層のディレクトリパスを取得する方法
Perl
-
10
小数点以下0の非表示
PHP
-
11
半角→全角変換
Perl
-
12
cgi 実行時のエラー
Perl
-
13
perlで容量の大きいCSVファイルを開く方法
Perl
-
14
perlで配列の要素が空なのを知るには?
Perl
-
15
文字化けしてしまって困っています
PostgreSQL
-
16
Malformed UTF-8 character
Perl
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl でエラー:Wide character...
-
MFCのコントロールにUTF-8の文...
-
オブジェクト? perlをオーバー...
-
UTF-16からUTF-8への変換
-
数字を1桁なら半角、2桁以上...
-
sedやperlでの2バイト文字を含...
-
カタカナ一覧表が知りたい
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
住宅にカナを入力する際に丁目...
-
マクロを使ってフォルダー内に...
-
Excel VBAでPDFファイルをMicro...
-
VBA 文字に半角が含まれて...
-
word差し込み印刷 半角カタカ...
-
エクセルで数値を全角文字(カ...
-
vba アクティブシートの名前変...
-
「何とかで始まり、何とかで終...
-
正規表現で、特定の文字列を含...
-
VBで、String型のデータが、...
-
VBA EXCEL あるセルの中の一...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
【文字コード】外見上は全く同...
-
perlについての質問
-
sedやperlでの2バイト文字を含...
-
jcode.plのかわり
-
【LaTeX】pBibTeXでのエラーの...
-
MFCのコントロールにUTF-8の文...
-
カタカナ一覧表が知りたい
-
HTML::Templateでutf-8のテンプ...
-
CGIでメール送信で件名文字化け
-
Java+MySQLで特殊文字(丸数字(...
-
UTF-16からUTF-8への変換
-
printfの書式指定での2バイト文...
-
perlで読み込むテキストの文字...
-
デバッグ情報が文字化けする
-
UTF-8のPerlから、UTF-8、EUC、...
-
PerlでRSS取得 ~ 文字化け ~ ...
-
EC-CUBEでの文字化け
-
オブジェクト? perlをオーバー...
-
Perlで、文字の出現回数を調べ...
おすすめ情報