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

JavaScriptファイルをSJIS、EUC、UTF8を統一したために

スクリプト上で

var str = "あいうえー";

をUTF16で

var str = "\u3042\u3044\u3046\u3048\u30fc";

このように変換をしましたが

alert("\u3402");とかですと、文字化けはしないのですが、

innerhtml="\u3402";
のようにやると、文字化けをしてしまいます。

どのようにしたら対処できますでしょうか?

もし、対処方法なければ、仕方ないので、コード判別をできるようにと考えています。

A 回答 (6件)

No1です。



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

>>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で文字コードを指定することもできます。

この回答への補足

ありがとうございます。

JavaScriptファイルは、日本語部分をUTF16にエンコードしてから
エスケープしているために、
SJISでもEUCでもUTF8でもない ASCIIの状態になっています。

また、twitter APIからJSONを手動で取得して、何も変換せずURLを js ファイルにしてやると
これも文字化けがしません。

(同じスクリプト上で、http fetchを単純に行っています)

補足日時:2013/01/27 02:16
    • good
    • 0

No1です。



先ほど書いた文の意味がわかりませんか?
>とにかく、文字化けをするというコードを書いてもらわないと、アドバイスしようが無いです。

「文字化けをするというコードを書いてください。」って、他に言い換えようが無いので、もう一度同じことを書きました。

>それが、alertでやると、文字化けをしません。

「普通にやると化けるはずは無いので。 」と書いたとおりです。化けないのが正常です。

この回答への補足

ありがとうございます。

そこが困っている所です。

補足日時:2013/01/27 02:11
    • good
    • 0

No1です。



補足の内容がさっぱり理解できません。
>EUCコードのHTMLに対し、JavaScript用エンコードにされたUTF16で

それは当然では?ページ全部UTF-16で統一しないと。

とにかく、文字化けをするというコードを書いてもらわないと、アドバイスしようが無いです。
普通にやると化けるはずは無いので。

この回答への補足

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

補足日時:2013/01/20 23:48
    • good
    • 0

> var str = "\u3042\u3044\u3046\u3048\u30fc";


これは、JavaScriptのUnicodeエスケープシーケンスであってUTF16ではないです。

ブラウザがJavaScriptの文字コードを正しく認識できているなら
その文字コードで普通に書けば良くて、
Unicodeエスケープシーケンスを使う必要は特にないはずですが?
(使用している文字コードで表現できない文字を文字列リテラルに含めたいならともかく。)

ASCII互換のどの文字コードと認識されても使えるように、ASCIIの範囲内の文字しか使わないって言う配慮なのかなあ。
JSONでやりとりするときはUnicodeエスケープシーケンスされてることが多いし、場合によってはそれもありなのかもね。


なお、「あ」のコードポイントはU+3042。

この回答への補足

ありがとうございます。
実際は、旧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)

補足日時:2013/01/20 22:54
    • good
    • 0

>のようにやると、文字化けをしてしまいます。



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>

この回答への補足

ありがとうございます。
実際は、旧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用エンコードにしたものは、外部ファイルになります。

補足日時:2013/01/20 22:53
    • good
    • 0

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