• 締切済み

JavaScriptが文字化けする

JavaScriptファイルをSJIS、EUC、UTF8を統一したために スクリプト上で var str = "あいうえー"; をUTF16で var str = "\u3042\u3044\u3046\u3048\u30fc"; このように変換をしましたが alert("\u3402");とかですと、文字化けはしないのですが、 innerhtml="\u3402"; のようにやると、文字化けをしてしまいます。 どのようにしたら対処できますでしょうか? もし、対処方法なければ、仕方ないので、コード判別をできるようにと考えています。

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.6

No1です。 なぜそこまでかたくなに、コードを秘密にするのですか?恥ずかしい? 質問者が情報を出さないと、解決するものもしませんよ。

  • q-ue
  • ベストアンサー率75% (12/16)
回答No.5

>>JavaScriptファイルをSJIS、EUC、UTF8を統一したためにスクリプト上で 文字コードを統一するだけなら、エスケープシーケンスに変換するのではなく、ファイルの文字コードを変更すればいいのでは? (以下引用) EUCコードのHTMLに対し、JavaScript用エンコードにされたUTF16で (イメージで確認してください) innerhtml= "<table><tr><td>@" + username + "のツィート</td></tr>"+ "<table><tr><td>" + (JSONより変換したHTML) + "</td></tr>" + "</table>" の部分の、「のツィート」 を JavaScript用エンコードにして化けてしまうようです。 HTMLがUTF8ですと、正常に表示されます。 (引用終わり) JavaScriptファイルの文字コードはUTF-8、HTMLファイルはEUC-JPになっているということですか? もしかして、外部から取得したデータではなく、そのJSファイルの中に「のツィート」という文字がそのまま書かれているのですか? もしそうだとしたら、文字化けするのは当たり前ですが...。 HTMLやJavaScriptファイルの文字コードは一つに統一した方が扱いやすいと思います。 文字コードを同一にできないのならば、 <script src="ソース" charset="JSファイルの文字コード"></script> というように、HTMLで文字コードを指定することもできます。

ymda
質問者

補足

ありがとうございます。 JavaScriptファイルは、日本語部分をUTF16にエンコードしてから エスケープしているために、 SJISでもEUCでもUTF8でもない ASCIIの状態になっています。 また、twitter APIからJSONを手動で取得して、何も変換せずURLを js ファイルにしてやると これも文字化けがしません。 (同じスクリプト上で、http fetchを単純に行っています)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.4

No1です。 先ほど書いた文の意味がわかりませんか? >とにかく、文字化けをするというコードを書いてもらわないと、アドバイスしようが無いです。 「文字化けをするというコードを書いてください。」って、他に言い換えようが無いので、もう一度同じことを書きました。 >それが、alertでやると、文字化けをしません。 「普通にやると化けるはずは無いので。 」と書いたとおりです。化けないのが正常です。

ymda
質問者

補足

ありがとうございます。 そこが困っている所です。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

No1です。 補足の内容がさっぱり理解できません。 >EUCコードのHTMLに対し、JavaScript用エンコードにされたUTF16で それは当然では?ページ全部UTF-16で統一しないと。 とにかく、文字化けをするというコードを書いてもらわないと、アドバイスしようが無いです。 普通にやると化けるはずは無いので。

ymda
質問者

補足

ありがとうございます。 それが、alertでやると、文字化けをしません。

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

> var str = "\u3042\u3044\u3046\u3048\u30fc"; これは、JavaScriptのUnicodeエスケープシーケンスであってUTF16ではないです。 ブラウザがJavaScriptの文字コードを正しく認識できているなら その文字コードで普通に書けば良くて、 Unicodeエスケープシーケンスを使う必要は特にないはずですが? (使用している文字コードで表現できない文字を文字列リテラルに含めたいならともかく。) ASCII互換のどの文字コードと認識されても使えるように、ASCIIの範囲内の文字しか使わないって言う配慮なのかなあ。 JSONでやりとりするときはUnicodeエスケープシーケンスされてることが多いし、場合によってはそれもありなのかもね。 なお、「あ」のコードポイントはU+3042。

ymda
質問者

補足

ありがとうございます。 実際は、旧APIでTwitterからJSONを取得して、それを表題の枠の中に表示するものですが、 その表題が化けてしまいます。 実際のソースは結構複雑になるのですが 例えば・・・ EUCコードのHTMLに対し、JavaScript用エンコードにされたUTF16で (イメージで確認してください) innerhtml= "<table><tr><td>@" + username + "のツィート</td></tr>"+ "<table><tr><td>" + (JSONより変換したHTML) + "</td></tr>" + "</table>" の部分の、「のツィート」 を JavaScript用エンコードにして化けてしまうようです。 HTMLがUTF8ですと、正常に表示されます。 #JavaScript用エンコードにしたものは、外部ファイルになります。 JavaScript用エンコードではなく、生の漢字コードを埋め込んだ場合 UTF8にしたものは、UTF8のHTMLで、EUCのものはEUCのHTMLできちんと表示されます。 化けるブラウザは、確認した全ブラウザでなります。(IE/FF/Op/Sa/Chrome)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

>のようにやると、文字化けをしてしまいます。 Firefox18.0.1とIE9でやってみたけど化けません。「㐂」という字ですよね? <!DOCTYPE html> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-16" /> </head><body> <div id="X"> </div> <script> var x=document.getElementById("X"); if(x) { x.innerHTML="\u3402"; } </script> </body></html>

ymda
質問者

補足

ありがとうございます。 実際は、旧APIでTwitterからJSONを取得して、それを表題の枠の中に表示するものですが、 その表題が化けてしまいます。 実際のソースは結構複雑になるのですが 例えば・・・ EUCコードのHTMLに対し、JavaScript用エンコードにされたUTF16で (イメージで確認してください) innerhtml= "<table><tr><td>@" + username + "のツィート</td></tr>"+ "<table><tr><td>" + (JSONより変換したHTML) + "</td></tr>" + "</table>" の部分の、「のツィート」 を JavaScript用エンコードにして化けてしまうようです。 HTMLがUTF8ですと、正常に表示されます。 #JavaScript用エンコードにしたものは、外部ファイルになります。

関連するQ&A

  • MySQL5.1の文字化け

    多くの方が同様の質問をされていたのですが、一致する問題が見つけれなかったので、ご存じの方がおられたら教えて下さいm(_ _)m (環境)  PHP 5.2.8 ZendFramework 1.5.1 から Pdo Mysqlを使用  文字コード:SJIS  Mysql 5.1  文字コード:EUC-JP (質問内容) 携帯の絵文字データをSJISのバイナリでスクリプト中に埋め込むため、スクリプトの文字コードをSJISに統一したところ、文字化けが発生しました。 SET NAMES SJIS のSQLを発行することで表示は正しくできるようなったのですが、新たにレコードを追加しようとすると文字化けが発生します。 例)情報 → 情表 insertを行う前の文字コードをSJIS,SJIS-win,EUCと変えてみましたが、SJISもしくはSJIS-winの場合は上記の例のとおりとなり、EUCにすると完全な文字化けとなりました... おそらく登録時にMYSQLがSJIS→UTF8→EUCに変換される時に正しく変換されていないものと思われるのですが、どなたか対処方法をご存じないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpとMysqlの文字化け

    何度もすみません。 phpからinsertするときとphpmyadminから直接挿入するときどちらも文字化けを起こします。 phpは4.4.9でmysqlは5です。 myadminのMySQL 接続の照合順序はsjisにしております。 照合順序と保存される文字コードは違うのでしょうか。 phpファイルはsjisで保存しています。 過去の質問を見たり、調べてset name sjisとset name ujisと mb_convert_encoding($str, "EUC-JP", "SJIS");を それぞれ試しましたが文字化けのままです。 mb_convert_encoding($str, "utf-8", "SJIS"); であいうえおと入力してみたところあい???となりました。 また、adminから直接挿入した時、同じくあいうえおと入力しましたが、 こちらもあい???となりました。 adminの設定はutf-8ということのでしょうか。 照会順序以外文字コードについて表示されているところがわからなかったのですが、 どこで確認できますでしょうか。 また、php、adminともどこの設定を確認すれば良いのでしょうか? 恐れ入りますが教えていただけますでしょうか。

    • ベストアンサー
    • PHP
  • PHP+Postgres 「髙」が文字化け

    DB上に格納した文字列を取得し、PHPで出力すると、 「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。 環境は以下です。 Linux(CentOS 5) PHP 5.1.6 Apache 2.2.3 PostgreSQL 8.4.3 文字コードは以下です。 Postgres:EUC-JP PHPソース:EUC php.ini の[mbstring]はコメントのまま変更していません。 文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。 Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。 mb_language("uni"); mb_internal_encoding("euc-jp"); mb_http_input("auto"); mb_http_output("euc-jp"); $str = "髙橋"; print(mb_convert_encoding($str, "EUCJP-win")); print(mb_convert_encoding($str, "EUCJP-win","EUC-JP")); print(mb_convert_encoding($str, "SJIS")); print(mb_convert_encoding($str, "SJIS","EUC-JP")); print(mb_convert_encoding($str, "SJIS-win")); print(mb_convert_encoding($str, "SJIS-win","EUC-JP")); print(mb_convert_encoding($str, "UTF-8")); print(mb_convert_encoding($str, "UTF-8","EUC-JP")); print(mb_convert_encoding($str, "EUC","SJIS")); print(mb_convert_encoding($str, "Unicode")); print(mb_convert_encoding($str, "Unicode","EUC-JP")); print(mb_convert_encoding($str, "UTF-8", "sjis-win")); print(mb_convert_encoding($str, "CP51932")); print(mb_convert_encoding($str, "MS932")); print(mb_convert_encoding($str, "MS932","EUC-JP")); print(mb_convert_encoding($str, "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win")); http://blog.livedoor.jp/loopus/archives/50160285.html 上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、 文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。 ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。

    • ベストアンサー
    • PHP
  • 特定文字での文字化け

    DB(oracle)から抽出したものをPerl5でcsv出力しているのですが、特定文字で文字化けが起こってしまいます。 特定文字というのが、シフトJISの「拡張文字」と言われているものにあたるらしく、 0xED40~0xED9Eとか0xFA40~0xFA9Eとかです。 0xED40→ス、0xED9E→シ、0xFA40→。、0xFA9E→.となってしまいます。(文字を出したかったのですが、表示されなかったので文字コードにしました。) $strをDBより抽出した文字列として jcode::convert( \$str, "euc" ); : :(文字列の区切り処理) : jcode::convert( \$str, "sjis" ); ということをやっています。 以前、 &jcode'convert( $str, "euc" ); : :(文字列の区切り処理) : &jcode'convert( $str, "sjis" ); とやっていたのですが、この場合、 「半角カナ+文字コードが7cを含む文字」 が文字化けを起こしていました。 これを修正するために前者のような修正をしたのですが、 間違っているのでしょうか? すみませんが、よろしくお願いします。

  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • PHPとmysqlでの文字化けについて

    現在PHPとMySQLを利用したwebシステムを作成しています。 しかし文字化けが発生して困っています。こちらの環境は PHP5.1.4 MySQL5.1.11 phpMyAdmin - 2.8.0-rc1 レンタルサーバー(xrea)を使っています。 自分でいろいろと調べたところ文字のエンコードはujisに統一したほうがいいとのことまではわかりました。 show variables like "char%"; を実行したところ character_set_client utf8 character_set_connection sjis character_set_database ujis character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 このように表示されます。 PHPの方も <?php header('Content-Type:text/html; charset=EUC-JP'); ?> や <?php $str = mb_convert_encoding($str, "EUC-JP", "auto"); ?> を実行しても日本語の部分は???で表示されてしまいます。 いろいろと調べたのですが、さっぱり原因がわかりません。 よろしくお願いします。

  • 文字化けしてしまいます。

    ~の文字が文字化けして、どうしても解決ができません。 どなたかお分かりになる方、アドバイスをよろしくお願いいたします。 PHP5、Xampp、XP の開発環境になります。 実は出勤時間をPCからと携帯からの両方で管理しようと思っています。 データ保存用ファイルは、utf-8のtxtファイルになります。 すべてをutf-8のファイルで作ることができれば、問題は起きてこないわけですが、携帯が かかわってきており、sjisを使わざるを得ません。かといって、すべてのファイルをSJISにするのも これまた、ダメ文字の関係でそれもできません。 そこで、携帯だけはsjisファイルで作っています。このsjisファイルとutf-8ファイルの間で文字化けが おきてしまいます。 出勤時間を読み込んで、10:00~のようにutfの保存用ファイルから読み込んで、mb_convert_encoding でsjisに変換して表示をします。これは、普通に表示になります。 表示されたファイルは携帯のsjisファイルですので、携帯から出勤時間を変更して保存しようとする 場合、今度はsjisからutf-8に変更して保存する必要があります。 そこで、携帯からutf-8の保存用ファイルに更新した内容を保存する場合にmb_convert_encodingを かけて、utf-8に変換しました。一応、mb_detect_encodingを使ってutf-8に変更されていることも 確かめました。 しかし、保存さているデータは、10:00縲 というように~が縲に文字化けしてしまいます。 この文字化けを回避する方法がお分かりの方、ぜひお知恵をお貸しください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • JavaScriptのinnerHTMLの挙動について

    下で"JavaScript内からJavaScriptを書き出したいのですが"で質問したものですが,ソースコードを簡単にして再質問したいと思います. ソースは以下のようにし,divタグのところにinnerHTMLで文字"test"とJavaScriptでアラートを表示させるものです.表示してみたところ,"test"は表示されるのですが,アラートは出てきません. これはinnerHTMLではHTMLのタグは評価されるが,JavaScriptは評価されない,ということなんでしょうか.JavaScriptのこのような仕様は調べにくいので困っています.回答宜しくお願いします. <html><head><title></title> <SCRIPT type="text/javascript"> <!-- var str='<font color="blue">test</font><script type="text/javascript">alert(123);</script>'; function gogo(){ document.all("here").innerHTML = str; } //--> </SCRIPT> </head><body> <div id="here" style="position:absolute;width:600px;left:0px;top:0px;"></div> <SCRIPT type="text/javascript"> <!-- gogo(); //--> </SCRIPT></body></html>

  • 文字化け

    FAQになっていますが、AJAXの文字化けで苦しんでいます。 長文失礼します。よろしくお願いします。 作成中の中心部分の抜き出し部分を添付します。 ダイアログで日本語を入力しそのまま返すのですが、文字化けします。 Windows XP TOMCAT6.0.18 prototype.js(最新リリース) ソースはすべて、SJIS、dialogProc関数の処理の問題とは思いますが。 以下はjavascript部分(test1.js) function dialogProc() { window.showModalDialog( "test1?mode=dialog", this, "dialogWidth:480px;dialogHeight:480px" ); } function clickAct() { var request = new Ajax.Request( 'test1', { method:'post', asynchronous:false, parameters: Form.serialize( 'form' ), onFailure: function( response, options ) { alert( 'error' ); return( false ); } } ); document.getElementById( 'SERVLET_RESULT').innerHTML = request.transport.responseText; return( true ); }

  • IE6の文字コードとjavascript

    よろしくお願いします。 間違った言葉の使い方があるかもしれませんが、どうぞご容赦ください。 ホームページ上でJavaScript(Jquery)を使い、画像をスクロールさせています。 同じページにRSSでブログの更新情報を載せています。 RSSのPHPは”utf-8”で文字出力をしています。 ホームページのhtmlも”utf-8”です。 IE6で動作確認をしたところ、RSSの部分が文字化けしてしまいます。 そこで、html、php、cssの全てを”euc-jp”に変更してみました。 すると、IE6上でも文字化けすることなくブログの更新情報が表示されました。 が、”euc-jp”に変更するとIE6上でのみ画像スクロールのJavaScriptが動かなくなってしまいます。 IE6上で文字化け回避し、なおかつJavascriptを動かす方法はあるでしょうか? 個別のプログラムに寄りますか? 何をお知らせしてご意見を仰げばよいのかもわからず、 今回は現象のみお知らせしてご質問させていただいております。 お知らせすべき事項もご指示いただければ幸いです。 よろしくお願いします。

専門家に質問してみよう