dポイントプレゼントキャンペーン実施中!

質問タイトルのままですが、16進数の文字列変換について非常に困っています。
皆さんのお知恵をお貸しいただけないでしょうか。

サーバ間のメッセージのやり取りで、受信側にて16進数となっているデータをテキストに変換をしています。
送信側文字コードがUTF-8の場合は、以下のコマンドで問題なく変換できています。
(コマンド例)
  コマンド:echo -n 'e3 81 93 e3 82 93 e3 81 ab e3 81 a1 e3 81 af' |xxd -r -p
  実行結果:こんにちは

ところが送信元文字コードがsjisの場合、文字化けしてしまいます。

(コマンド例)
  コマンド:echo -n '82 b1 82 f1 82 c9 82 bf 82 cd' |xxd -r -p
  実行結果:ア・ソヘ

この場合、まずは、sjisのテキストにデコードした後に、UTF-8に変換するのかなと考えていますが、
どのようにしたら良いかわかりません。

どなたかご教授願えないでしょうか。

よろしくお願い致します。

A 回答 (2件)

Shift_JISの文字列としては正しく変換できています。



どうすればいいかは、あなたがどうしたいか、によります。

端末に表示したいだけなら、xxd で16進→バイナリ(実態はShift_JIS)に変換したものを、 nkf 等でUTF-8に変換となります。
ですが、ExcelのようなShift_JISを期待するアプリで使うなら、Shift_JISのまま扱うのが便利です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

UTF-8に変換した結果をDBに登録したいので、
Shift_JISのままではなく、nkfを使用して文字コード変換してみようと思います。

お礼日時:2016/09/28 22:11

ちょっと状況がよく分かりませんね。


「実行結果」というのはどういう経路で表示されたものですか?
見たところ、「82」がどこかで落ちているような結果です。
最終的に表示されているのはb1→アなどを見るにShift_JISのようですが、
どこかで正しくない文字コードで解釈されて不正なバイト列が消されているのかなと感じます。

(ところでこのサイトはいつの間にか半角カナを使えるようになったんですね)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
せっかくご回答いただいたのに、遅くなり大変申し訳ありませんでした。

結論としては、xxdコマンドを実行した結果をinputにして、nkfでShift_JISに変換をかけて想定通りの結果となりました。

お礼日時:2016/10/18 20:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!