• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SJIS→UTF-8の文字コード変換)

SJIS→UTF-8の文字コード変換の方法とエラー対処法

このQ&Aのポイント
  • Perlを使用して、SJISの16進で表記された文字をUTF-8に変換する方法について説明します。
  • Unicodeの16進文字コードを使用して表示する際にエラーが発生する場合の対処法も紹介します。
  • SJISとUnicodeの句点の表示方法には違いがあり、エラーが発生することがあるため、変換方法について注意が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

use encoding "Shift_JIS"; use Encode; $a = chr(0x81).chr(0x42); $a = decode("Shift_JIS", $a); printf("句点の表示…%s\n",$a); printf("句点の表示…%c\n",0x3002);

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.4

失礼、下記の間違い。 $a= pack("H*",'8142');

全文を見る
すると、全ての回答が全文表示されます。
  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.3

>$a = 0x8142; 意図は分りますが、perl でなら、 $a= unpack("H*",'8142'); これで、他はそのままで動くでしょう。

全文を見る
すると、全ての回答が全文表示されます。
  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.1

質問の要領を得ませんが、一応回答。 $a = 0x8142; # 数値0x8142をShiftJisのマルチバイト文字「。」(0x81, 0x42)にする $a = pack("C2", $a>>8, $a&0xff); # マルチバイト文字「。」(0x81, 0x42)をワイドキャラクター「。」(\x{3002})にする use Encode; $a = Encode::decode("shiftjis", $a); こんなかんじかな?どういった出力を得たいのかが不明瞭なので、勝手に解釈して返答させていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字コードsjisをUTF8に書き換えたい

    CGIの勉強中の者です。 文字コードはSJISで保存しているCGIをUTF8コードに換えるには何が必要でしょうか? HTMLならmeta内をSJISからUTF8に変更し、TeraPadなどのテキストエディタでUTF8に保存すればオッケーなんですが。 CGIの場合はHTMLと違って、換えるには複雑なのでしょうか? CGIプログラムの中では以下の「sjis」を「UTF8」に書き換えし、UTF8で保存しましたけど、文字化けが出てます。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; 宜しくお願いします。

    • 締切済み
    • CGI
  • JAVAでSJISのコード変換

    JAVAで、UnicodeからSJISへのコード変換を行った上で ファイル出力を行いたいです。 たとえば文字列中にある「(1)」の文字コードが以下である時 ------------------------------- SJIS:8744 - UNICODE:2464 ------------------------------- 2464のコードを8744に変換した上でファイル出力したいです。 処理として、以下の様な形を考えているのですが 文字化けしてしまします。 ------------------------------- String source = "(1)あああああ"; 文字列の数分ループ処理↓ int code = (int) (source[x].charAt(i)); if (code == 2464) { strBuff.append(String.valueOf((char) (8744))); } ------------------------------- Unicodeで扱われているので「getByte("SJIS")」などとしているのですが 同様の結果となります。 何か良い手はないものでしょうか?

    • ベストアンサー
    • Java
  • shift-jisからutf8に変換

    解決に至らなかったので再度お尋ねします。 CGIのコードを見てくださいますか。 http://hotpegasus.bov.jp/mail.txt (必要な部分だけ表示しておりますので、そのままアップしても機能はしません) 改修した箇所は以下のです。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; ↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え <meta http-equiv="Content-Type" content="text/html;charset=utf8"> &Jcode'h2z_utf8(*contenido) &Jcode'convert(*subject,'utf8'); &Jcode'convert(*infor,'utf8'); &Jcode'convert(*contenido,'utf8'); &Jcode'convert(*res_msg,'utf8'); print "Content-type: text/html;charset=shift_utf8\n\n"; require 'jcode.pl'をuse Jcode;に書き換え ※jcode::" となっている箇所はありません 結果 メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。 どこが悪かったのでしょうか? 宜しくお願いします。

    • 締切済み
    • CGI
  • 【文字コード】外見上は全く同じなのに生の文字コードが異なるのはなぜ?

    文字コードで行き詰まりました。 同じUTF8で全く同じ文字列であるにも関わらず(外見上は全く同じにも関わらず)、2つの生の文字コードが異なるということが起きて、どうしたらいいのかわかりません。 WEBサイトから「あいう」という文字を取り出してきて、そいつの文字コードを、生で表示させました。 すると、 E38182E38184E38186 になります。ところが、perl文の中で$testStr="あいう"; として、そいつを同じように16進数で表示させると、 304230443046 と、違うものになっています。 にも関わらず、「WEBからとってきた文字列」も「perl内で書いた文字列」も両方「Jcode::getcode()」でその文字コードを調べると、utf8になります。 しかも、それら両方とも、print()をすると、同じように「あいう」と表示されます。 「perl内で書いた文字列」の方では、問題なくDBに入れれるのですが、「WEBからとってきた文字列」の方は、文字化けします。 「WEBからとってきた文字列」を「perl内で書いた文字列」のような文字コードに変換するにはどうすればよいのでしょうか? なぜ同じUTF8として認識されているのでしょうか? もう気が狂いそうです。 どなたかお助けください。お願いします。 環境 Ubuntu perl v5.8.8 built for x86_64-linux-gnu-thread-multi 以下は詳しいソースです。 use utf8;#この質問に関係がありそうなモジュールです use Jcode; use DBI; use URI; use YAML; use Switch; use Web::Scraper; use HTTP::Request::Common; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request::Common qw(POST); ##Webサイトから文字列「あいう」を取得してくる。取得過程は略してます。 $testStrFromWeb=@titleArr[$i];#ちなみにWebサイトの文字コードはUTF8です。 print("testStrFromWeb:".$testStrFromWeb);#「あいう」と表示されます。 ##Webサイトから得た文字列「あいう」の生の文字コードを表示。 $strCode=$testStrFromWeb; $strCode =~ s/(.)/sprintf "%X", ord($1)/eg; print "$strCode\n";#E38182E38184E38186と表示されます ##Webサイトから文字列「あいう」の文字コードの種類を表示(utf8が返ってくる) my $getcode = Jcode::getcode(\$testStrFromWeb); print $getcode ,"\n";#utf8と表示される ##perl内で書いた文字列。 $testStrInPerl="あいう"; print("testStrInPerl:".$testStrInPerl);#「あいう」と表示されます。 ##perl内で書いた文字列「あいう」の生の文字コードを表示。 $strCode=$testStrInPerl; $strCode =~ s/(.)/sprintf "%X", ord($1)/eg; print "$strCode\n";#304230443046と表示されます ##perl内で書いた文字列「あいう」の文字コードの種類を表示 my $getcode = Jcode::getcode(\$testStrInPerl); print $getcode ,"\n";#utf8と表示される ここまで読んでくださってありがとうございます。

    • ベストアンサー
    • Perl
  • POSTしたデータの文字コードがutf-8になる

    ヘッダーで文字コードをSJISになるように <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> と設定し、ボディ側のformで <form method="post" action="xxxxx"> <input type="text" name="n" value=""> <INPUT type="submit" value="実行"><br /> </form> とすると、サーバ側で受け取ったname="n"がutf-8になっています。 PHPですが、受け取った文字を echo mb_convert_encoding($_POST["n"],"SJIS","utf-8"): とSJISに変換し、表示すると、文字化けなく表示可能なのですが、そのままでは文字化けてしまいます。(表示側のHTMLも文字コードは上記と同様にヘッダーで文字コードを指定しSJISにしています。) 何が悪いのでしょうか?(特殊な環境としてはchrome+jquery mobileを使用しています。) よろしくお願いします。

    • ベストアンサー
    • HTML
  • "utf8"→ "sjis" の 文字化け・・・

    xml内のデータで utf8でかかれた 文字列中の ~ が XPATHでデータを取得し シフトジスに変換すると Encode::encode ローカルでは ? になり サーバーでは ?のあとに文字化けします。 Jcodeだと Jcode::convert($rValue, "sjis", "utf8"); ローカルでは ?? サーバーでは 〓 になります。 windowsで作った別のそふとや ブラウザ、メモ帳では 正常にxml内のデータで ~  が入っていることは確認できています。 XPATH(findvalue)の値だけを ファイルに書き込んで メモ帳で表示すると 正常に ~ が表示されるので Encode::encode 、Jcode の問題のようなのですが きちんと表示させる方法がわかりません。  なにか 設定をご存じでしたら よろしくお願いします。

    • ベストアンサー
    • Perl
  • Jcodeで変換できません。。。

    下記のCGI(文字コードはutf-8)を作成したのですが、正常に表示されません。 ~を上手に判定できていないということでしょうか??? また、もし、正しく変換できないのであれば、Jcodeで変換できない文字の一覧などあれば助かります。 分かる方、何卒、宜しくお願い致します。 #!/usr/bin/perl print "Content-type: text/html;charset=Shift_JIS\n\n"; $str = "1~10"; use Jcode; Jcode::convert( \$str,"sjis","utf8"); print $str; 表示された結果 1?10 となりました。

    • ベストアンサー
    • Perl
  • ShiftJIS 「脳」の文字コード

    SJISの「脳」の文字コードは? \x94\x5C しかし、場合によって読み込んだ文字の文字コードを表示させると\x94\x5Dになってしまいます・・・。 :例: 「脳内」のみを書いたSJISテキストファイル 「力脳」のみを書いたSJISテキストファイル 文字コードの取得方法に誤りがあるのでしょうか? use strict; use warnings; use strict; use warnings; open(FH,"text.txt") or die($!); while (my $buff= <FH>){ while($buff=~ /([\x81-\x9F\xE0-\xEF\xFC-\xFE][\x40-\x7E\x80-\xFC])/){ my $two_byte_sjis = $1; $two_byte_sjis =~ s/\x5C$/\x5C\x5C/; #スクリプト上エラーがでないようエスケープ my $replace = $two_byte_sjis; $buff=~ s/$replace//g; #無限ループしないよう$buffから削除 print "$replace => "; $replace =~ s/(.)/sprintf('%X', ord($1))/eg; print "$replace\n"; } } close(FH);

    • ベストアンサー
    • Perl
  • UTF-8の「~」をsjisにencodeすると「?」になってしまいます

    <?xml version="1.0" encoding="UTF-8" ?> <root> <data>あ~お</data> </root> というようなXMLをXML::Simpleでparseし、 use Encode; $data = encode("sjis", $xmldata); のようにsjisにエンコードしてhtmlで表示させたところ、 「あ~お」の「~」のところが「?」になってしまいます。 これを「あ~お」と表示するにはどうしたらよいでしょうか。 表示する方のHTMLのコードはShift_JISでなければなりません。 アドバイスのほど、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 文字コード変換

    送信元のページがShift_JISの場合は正常に動作するのですが、 UTF-8等の場合は文字化けしてしまいます。 &jcode'convert(*val, 'sjis'); ↑のものを use Encode; Encode::from_to( $val, "UTF8", "Shift_JIS", Encode::XMLCREF ); このように書いたところ、UTF-8も文字化けしないのですが、 コードを自動的に認識して自動で振り分けさせる方法がわかりません。 サーバーのPerlのバージョンは5.8.6です。よろしくお願いいたします。

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • 職場には指定のボールペンを使用するルールがありますが、実際にはそのルールに従っている人は少なく、矛盾が生じています。
  • シャーペンの使用は禁止されている理由は、粉が出るためと言われていますが、この理由は根拠がなく不快感を覚えます。
  • 指導者からはボールペンを使ってくださいとの指示がありますが、具体的な指定はされていないため、矛盾や不明確なルールが生じ、不満を抱いています。
回答を見る

専門家に質問してみよう