JSON形式の文字データの変換方法で悩んでいます。
(WEB上のAPIを叩いて取得してきたデータです)
例えば、、、
\u30aa\u30c1\u30b2\u30fc\u30c6\u30ce\u30bb\u30eb
この様な文字列です。
他のAPIで得られた文字データの場合、、、
Encode::from_to($name ,'utf8','sjis');
で問題なく日本語に変換できていたのですが、この形式の場合、全く変換されません。
上記の様な文字コードを日本語に変換するには、どうしたらよいのでしょう?
助言いただけると幸いです。
No.1
- 回答日時:
UTF-16の文字列のようの見えますね。
UTF-16で読むと「オチゲーテノセル」??
$ cat tmp.txt | nkf -w
オチゲーテノセル
$ file tmp.txt
tmp.txt: Big-endian UTF-16 Unicode character data
$ od -txC tmp.txt
0000000 fe ff 30 aa 30 c1 30 b2 30 fc 30 c6 30 ce 30 bb
0000020 30 eb 00 0a
0000024
アドバイス、ありがとうございます!
>UTF-16の文字列のようの見えますね
なるほど!
てっきり、UTF-8の変種かと思っていました。。。
>$ cat tmp.txt | nkf -w
、、、、、Perlだと、どの様にすると、変換できるのでしょうか?
(いくら、ぐぐっても、出てこないもので。。。)
お手数かけますが、引き続き、アドバイスいただければ幸いです。
No.2ベストアンサー
- 回答日時:
アホな方法で
s/\\u([[:xdigit:]]{4})/chr eval "0x$1"/eg;
みたいなのは考えられるけど, もっと賢い方法があると思う.
この回答への補足
>今度は、何も表示されなくなりました。(^_^;)
と思っていたのですが、、、、
●プログラムファイル自体を「utf8エンコーディングとunix(LF)改行」で保存し直した後、さらに、
Encode::from_to($name ,'utf8','sjis');
を取り去ってみたところ、正常に動いた上に、見事に日本語として表示されました!
(ありがとうございます!)
ただ、上記の置換の場合、改行のみが取り残されていたので、、、
$name=~s/\\n/<br>/g;
を付け加えたところ、完璧なものとなりました。
丸2日悩み続けていた問題が解決しました!
ありがとうございます!!
ただ、、、
>アホな方法で
とあるのですが、この方法のどこが賢くないのでしょうか?
(私は、この手法のどこが賢くないのか理解できる程、賢くありません(^_^;))
ご教授いただけると幸いです。
※今回の教訓
●Perlのソースは、はじめから「utf8エンコーディングとunix(LF)改行」で保存する事。
(今まで、デフォルトの設定で保存していて、問題が起きなかったため、つい、それをつづけていました。。。)
Tacosan様
助言、ありがとうございます。
>みたいなのは考えられるけど, もっと賢い方法があると思う.
$name=~s/\\u([[:xdigit:]]{4})/chr eval "0x$1"/eg;
や
$name=~s/¥\u([[:xdigit:]]{4})/chr eval "0x$1"/eg;
を試してみたのですが、今度は、何も表示されなくなりました。(^_^;)
(たぶん、私のperlプログラムファイルを「日本語(MacOS)エンコーディング、改行タイプをMac(CR)」で保存している事あたりに原因がありそうなのですが、use utf8宣言をして「utf8エンコーディングとunix(LF)改行」で保存した上で動かすと、これまた、今度はプログラム結果が何も表示されなくなります)
この様な状況の中、なんとか、UTF16の文字をSHIFTJIS文字へ変換する事はできないもんでしょうか?
No.3
- 回答日時:
「アホ」というか, 「かなり強引」な感じがするんですよ....
「16進 4桁の文字列が与えられたときに, それをコードポイントとする文字にする」ってのはそれなりにありそうな気がするんだけど, やってることが単純なわりに eval とか s///eg とかの強引な手段を使ってるというのが気にいらない. pack なり unpack なりが使えればシンプルでいいんだけど, よくわからなかった.
>pack なり unpack なりが使えればシンプルでいいんだけど, よくわからなかった.
私もpackやunpack、その他、複数のモジュールを試したのですが、何故かうまくいかず、Tacosanさんの手法で、はじめてうまくいきました。
Tacosanさんの手法を教えていただかなかったら、たぶん、あと1週間は悩んでいたと思います。(^_^;)
重ね重ね、ありがとうございました!
P.S.
私の環境では、うまく稼働しなかった参考にしたサイトを、とりあえず、書き記しておきます。
●Unicode::Japanese::JA
http://search.cpan.org/~hio/Unicode-Japanese-0.4 …
●Unicodeデコーダ「simaguni.pl」
http://www2.famille.ne.jp/~akio1998/simaguni.html
●unpack や use Encode qw( from_to );
http://oshiete.goo.ne.jp/qa/4186293.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) エクセル 表の移動 2 2023/04/05 20:29
- その他(Microsoft Office) wordの差し込み印刷での日付表示 2 2023/08/15 16:51
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Android(アンドロイド) 128GB LAZOS マイクロSDカード 1280円 もっと良い商品ある? 4 2023/02/07 19:42
- JavaScript json形式データのデータ連携について 4 2022/04/05 23:01
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- その他(ブラウザ) cvsファイルをダウンロードすると、自動で拡張子がExcelのものになる 5 2022/07/20 21:21
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのプログラミング 部分入れ...
-
Strawberry Perl for Windows ...
-
アルファベットに付いて質問し...
-
Perlで同じフォルダにある任意...
-
perlでリテラル値はメモリにど...
-
ペプシコーラとコカ・コーラとD...
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
perlで2次元配列をサブルーチ...
-
perlのrequireの動き方について...
-
perlについての質問
-
Blenderについて
-
Perl の外部モジュールの利用方法
-
perl このテキストファイルを簡...
-
Perlでファイルの末尾から指定...
-
秀丸での一括変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
INDIRECT 横に再度抽出したい
-
Perl の外部モジュールの利用方法
-
Perlで特定文字列から特定文字...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
Strawberry Perl for Windows ...
-
perlで2次元配列をサブルーチ...
-
TeraPadエディターの操作方法に...
-
アルファベットに付いて質問し...
-
perlのflock関数でロックをかけ...
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
Wallpaper Engineでおすすめの...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
perlでリテラル値はメモリにど...
-
画像が表示でnull; this.src
おすすめ情報