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

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

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

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

Q&A

解決済

4回答

7816閲覧

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

Reiku

総合スコア40

Perl

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

2グッド

2クリップ

投稿2016/01/15 05:25

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

###■ 実行環境
OS:CentOS6.7 32bit
perl v5.10.1
Jcode ver2.7

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

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

perl

1use strict; 2use Jcode; 3 4my $string = "山﨑\n"; 5 6Jcode::convert(\$string,'euc','utf8'); 7 8print $string;

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

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

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

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

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

mhashi, ikuwow👍を押しています

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

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

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

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

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

guest

回答4

0

自己解決

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

perl

1use strict; 2use Jcode; 3use Unicode::Japanese; 4 5my $string = "山﨑\n"; 6 7$string = Unicode::Japanese->new($string)->euc; 8 9print $string;

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

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

投稿2016/01/15 08:29

Reiku

総合スコア40

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

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

0

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

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

投稿2016/01/15 06:34

yuba

総合スコア5568

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

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

Reiku

2016/01/15 08:31

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

退会済みユーザー

2016/01/18 02:08 編集

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

2016/01/18 09:26

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

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

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

投稿2016/01/18 02:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

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

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

投稿2016/01/15 07:46

ipadcaron

総合スコア1693

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

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

Reiku

2016/01/15 08:30

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問