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

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

ただいまの
回答率

89.64%

【perl】機種依存文字のUTF8→EUC変換

解決済

回答 4

投稿

  • 評価
  • クリップ 2
  • VIEW 3,840

Reiku

score 34

■ やりたいこと

髙(はしご高)や、﨑といったような、機種依存文字の文字コードを
UTF8からEUCに変換し、文字化けさせずに表示させたい。

■ 実行環境

OS:CentOS6.7 32bit
perl v5.10.1
Jcode ver2.7

■ やったこと

perlのcgiプログラムにおいて、UTF8の文字列をEUCに変換し、表示するプログラムを
作成したいとおもっています。

UTF8からEUCへの変換はJcodeを用いています。
下記に、作成したプログラムを示します。
なお、作成したプログラム自体は、UTF8です。

use strict;
use Jcode;

my $string = "山﨑\n";

Jcode::convert(\$string,'euc','utf8');

print $string;

このプログラムをサーバー上で実行すると、機種依存文字の「﨑」が文字化けをし、
「?」となって出力されてしまいます。
(当方、SSHクライアントはTeraTermを利用していますが、「設定>端末」から
漢字-受信をEUCにして、結果を確認しています。)

通常の機種依存ではない漢字などは、問題なく変換できるのですが、
機種依存文字だけが、文字化けを引き起こしてしまいます。

★ 質問したいこと

前述のような、UTF8の機種依存文字を、文字化けさせずにEUCに変換する方法を教えていただきたいです。
可能であれば、具体的なソースコードを提示して頂けると大変参考になります。

そもそもJcodeを使った方法で、機種依存文字をUTF8からEUCに変換することはできるのでしょうか?もし出来ないのであれば、代替案を教えて頂けますと助かります。

なにか足りない情報等あれば、その旨をお伝え頂けると幸いです。
どうぞ、よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+2

(ここでいう「JIS」はJIS X 2013を意味します)

  • 﨑はJIS第三水準漢字です。「機種依存」などではありません。
  • 髙はJISにはないもののUnicodeにあります。「機種依存」などではありません。
  • EUC-JPはJISの文字集合を符号化するものです。JISに含まれない「髙」を符号化する方法はありません。
  • 第三水準漢字も表現できるEUC-JPとしてはEUC-JIS-2004というエンコーディングがあります。ただし、EUC-JP-2004の実装は現時点では存在しないはずですので、変換するライブラリも表示する手段もありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/15 17:31

    コメントありがとうございます。
    一概にSJISとかEUCとか言っても色々な種類があるのですね。参考になります。

    キャンセル

  • 2016/01/18 11:07 編集

    use Encode::JISX0213;
    なんてのもあるので、選択するエンコードによってなんとかなるケースもあるかと思われます。

    キャンセル

  • 2016/01/18 18:26

    > use Encode::JISX0213;

    このオプションは有望ですね。
    これで変換できたとしたらあとは表示側を用意できるかですが。

    キャンセル

check解決した方法

+1

回答頂いた方、ありがとうございます。
思案していたところ、自己解決しました。
Jcodeではなく、Unicode::Japaneseを利用したらうまくいきました。

use strict;
use Jcode;
use Unicode::Japanese;

my $string = "山﨑\n";

$string = Unicode::Japanese->new($string)->euc;

print $string;

とりあえずは問題ないので、一旦質問は閉じさせていただきます。
ただ、文字コード周りは自分が思っている以上にやこしそうですので、
今後しっかり理解していく必要がありそうです。
("とりあえず"の理解では後々問題起きそうですし・・)

ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

Encode::JISX0213 - JIS X 0213 encodings - metacpan.org
https://metacpan.org/pod/Encode::JISX0213
Encode::JIS2K - JIS X 0212 (aka JIS 2000) Encodings - metacpan.org
https://metacpan.org/pod/Encode::JIS2K

・・とか試してはいかがでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-2

https://www.softel.co.jp/blogs/tech/archives/2526

perl でも、mb_convert_string が使えるなら、これで解決するのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/15 17:30

    コメントありがとうございます。
    perlではmb_convert_stringは使えないような・・?
    軽くしか調べてませんので意見を参考に、詳しく調べてみますね。

    キャンセル

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

  • ただいまの回答率 89.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる