質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

Q&A

解決済

1回答

11422閲覧

PerlのJSON化で、文字化けが起きてしまう

退会済みユーザー

退会済みユーザー

総合スコア0

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

0グッド

0クリップ

投稿2015/07/01 12:59

環境

  • Perl 5.8
  • EUC-JP

Perlで、をJSONを作成し連想配列又は、配列に格納すると文字化けしてしまうみたいです。

lang

1my %program = ( 2 '備考' => ほげほげ, 3); 4 5my $json = JSON->new->utf8(0)->encode(\program); 6print $json; 7# JSONになっている 8# {"備考":"ほげほげ"} 9 10my %hash = ( 11 'JSON' => $json, 12); 13 14print Dumper %hash; 15# 文字化けする 16# "{\"\x{c8}\x{f7}\x{b9}\x{cd}\":\"\x{a4}\x{db}\x{a4}\x{b2}\x{a4}\x{db}\x{a4}\x{b2}\"}"

扱う文字コードはEUC-JPです。
utf8ふらぐあたりの関係かなと思って、色々encode/decodeしてみましたが、うまくいきませんでした。
この問題、ご存知のかたいらっしゃいますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もしも、utf8フラグがついていない文字列の値をJSONへ変換したいのであれば、

lang

1use JSON; 2my %hash = ("msg" => "ほげほげ"); 3my $json_str = to_json(\%hash);

のようにすればうまくいきます。
JSONパッケージの encode/decode はutf8フラグが付いている文字列に対して使用する関数で、
フラグなしは、to_json/from_json を使用します。

投稿2015/07/01 13:07

circus55

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/07/01 13:41 編集

やはり$json_strをハッシュに格納すると文字化けしてしまいます。 ```lang-perl my %hash = ( 'JSON' => $json, ); ```
circus55

2015/07/01 14:18

あ・・・これは申し訳ない。 Dumperで日本語がエスケープされているのが問題だったのですね $Data::Dumper::Useperl = 1; と一行入れて出力してみてください。 デフォルトではDumperの設定で日本語がエスケープされて出力されてしまうのです。
circus55

2015/07/01 14:51

もしもutf8フラグが付いているソースであるなら、上記の一行に加えて、 { package Data::Dumper; sub qquote { return shift; } } これも追加してみてください。 ※ フラグがないならあってもなくてもOKです
退会済みユーザー

退会済みユーザー

2015/07/01 14:52

すいません。 ありがとうございます! JSONだと日本語がエスケープされてしまうのですね。 これとは別件で、DBに格納時に文字化けしていたので、JSONの変換がうまく行っていないと勘違いしておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問