UTF-8に不慣れで感じがまだ、つかめておりません。
○ encode('shiftjis', decode('utf8', $utf_str));
とすると、正しく漢字が表示されましたが、
× encode('shiftjis', $utf_str));
とすると、?????などの文字列が表示されます。
$utf_strは UTF-8だと思いますが、
decode('utf8', $utf_str)が必要な理由はなんでしょうか?
あと、Perl5.8では from_toがありますが上と同じ事を
from_to($utf_str, "utf8", "shiftjis");
とできるということでしょうか?
No.2ベストアンサー
- 回答日時:
>use encodingはプラグマですが、副作用があるので使わない方が良いという内容の記事を読んだことがありますが、大多数の方は無問題で使っているということでしょうか?
その記事を読んだことはないし、他の大多数の人のことは知らないので、よくわかりませんが、
経験的には、
use encoding 'shiftjis';
とかでは(内部コードへの)マップに問題が有る時があります。
しかし
Perlの内部フォーマットがUTF-8なので、UTF-8では問題は起こらないという認識(私的には)です。
また、クックブックに書かれている説明によると、
”全てのオクテット文字列を有効なUTF-8文字列にはできないが、UTF-8文字列は全て有効なオクテット文字列に変換できる”(Vol.1,1-10)
とあるので、UTF-8を使っている場合は問題ないと思います。
ただ、以前unicodeから文字コード変換で一部割り当てがおかしいものがあるというような記事を(OKWeb)で読んだことがありますので、やはり、文字コードの変換には一部うまくいかない場合もあるということかと思います。
No.1
- 回答日時:
>decode('utf8', $utf_str)が必要な理由はなんでしょうか?
多分、スクリプトの先頭で
use encoding 'UTF-8';
とされていないのでしょう。
スクリプトがどの文字コードで書かれているかを、Perlに指示していないので、
$utf_strが内部表現としてのUTF-8でなく単なるオクテット(バイト並び)だとして扱われているためにdecode('utf8', $utf_str)が必要になるのだと思われます。
>上と同じ事を
from_to($utf_str, "utf8", "shiftjis");
で同じコトができます。
なお、スクリプトがUTF-8の時にシフトJISで出力するだけなら
use encoding 'UTF-8', STDOUT => "shiftjis";
と書けば事足ります(STDERRも必要かも)
この回答への補足
use utf8;
binmode STDOUT, ":utf8";
としています。
use encodingはプラグマですが、副作用があるので使わない方が良いという内容の記事を読んだことがありますが、大多数の方は無問題で使っているということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- HTML・CSS <meta charset="utf-8"><!-- 文字化け防止ユニコード --> ?最近モバイル 1 2022/12/11 04:27
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- Windows 8 メモ帳による文字コード変換 2 2022/09/01 18:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【LaTeX】pBibTeXでのエラーの...
-
perlで読み込むテキストの文字...
-
Perlで、文字の出現回数を調べ...
-
printfの書式指定での2バイト文...
-
MFCのコントロールにUTF-8の文...
-
perl でエラー:Wide character...
-
CSVファイルの中で、「 , 」カ...
-
マクロを使ってフォルダー内に...
-
英数字のみ全角から半角に変換
-
「何とかで始まり、何とかで終...
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
エクセルにMicrosoft Barcode C...
-
カンマ区切りの数字をCSVフ...
-
各項目がダブルクォーテーショ...
-
Excel VBAでPDFファイルをMicro...
-
住宅にカナを入力する際に丁目...
-
csvデータ ダブルクォーテ...
-
CSVの定義
-
正規表現で、特定の文字列を含...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
【LaTeX】pBibTeXでのエラーの...
-
MFCのコントロールにUTF-8の文...
-
jcode.plのかわり
-
【文字コード】外見上は全く同...
-
デバッグ情報が文字化けする
-
UTF-16からUTF-8への変換
-
機種依存文字(株)を入力すると\...
-
今更ながらdbmopenでutf8環境に...
-
sedやperlでの2バイト文字を含...
-
perlについての質問
-
CGIでメール送信で件名文字化け
-
Java+MySQLで特殊文字(丸数字(...
-
Jcode.pmでconvertできない
-
WWW::Mechanizeの文字コードに...
-
HTML::Templateでutf-8のテンプ...
-
Perlで、文字の出現回数を調べ...
-
カタカナ一覧表が知りたい
-
WindowsでUTF-8のPerlスクリプ...
-
UTF-8 フラグ?で文字化けしま...
おすすめ情報