2012-01-12 14 views
13

私たちは、以下のコードによって、個々のCSSファイル内の文字エンコーディングを宣言することができます。INDIVIDUAL JSファイルで文字エンコーディングを宣言するにはどうすればよいですか?

@charset "UTF-8";

を私の質問は:

個人JSファイルの文字エンコーディングを宣言するためにどのように?

JSファイルを友人に送信すると、このJSファイルの参照または編集を開始するときに、JSファイルの文字エンコードをコード自体から理解できることを願っています。

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

答えて

13

できません。ただし、ファイルをcharset attributeを使用してページに表示する​​で定義できます。これはファイルを提供するContent-Typecharset(存在する場合)と一致する必要があります。引用:

charset属性は、外部スクリプトリソースの文字エンコードを提供します。 src属性が存在しない場合は、属性を指定しないでください。属性が設定されている場合、その値は有効な文字エンコーディング名でなければならず、そのエンコーディングのpreferred MIME nameASCII case-insensitive matchでなければならず、外部ファイルのContent-Type metadatacharsetパラメータに指定されたエンコーディングと一致する必要があります。あなたの編集再[IANACHARSET]

:彼(彼女)に開始したとき、私は私の友人にJSファイルを送信する場合

、私は彼(彼女)がこのことを理解することを願っては、コード自体からのファイルの文字エンコーディングをJSこのJSファイルを編集してください。

これについては、ほとんどあなたに言わせてください。ファイルがUTF-8またはWindows-1252またはISO 8859-1の場合、残念ながらエンコーディングのインファイルインジケータがありませんので、最初の行に沿ってコメントを追加します。

UTF-16またはUTF-32を使用している場合は、BOMを使用するようにエディタに指示する必要があります。他のエディタは(Unicode対応のエディタの場合は)理解して理解する必要があります。これは通常、マルチバイト文字を多く必要とするテキスト(言語)でコメントを記述していて、コードが西洋テキストで書かれているため、コードに対するコメントの割合が高い場合にのみ適用されます好きなエンコーディングを使用することは大歓迎です。コメントとコードの比率が低い場合は、4バイトの文字がたくさん必要なテキストにコメントが含まれていても、UTF-8を使用するほうが良いでしょう。コードには1文字あたり1バイトしか必要ないからです。 (UTF-16では、コメントに4バイト文字の代わりに2バイト以上の文字が含まれていますが、コードは常に1文字につき2バイト、UTF-32では1文字あたり4バイト必要です。コメントのスペースが少なくてもファイルは大きくなるかもしれませんが、ここで私はあなたの質問の理由を正確に推測していれば、あなたがすでに知っていることをもっとよく知っているでしょう)

+0

また、UTF-8用のBOMを含めることもできますし、ブラウザはそれを尊重します。 – Andrea

+0

@Andrea:すべてのブラウザではなく、信頼性がありません。関連するRFCでは、応答が「US-ASCII」であることを明確に示しています。ちょうど2週間前に、IEはajaxでリクエストされたJSONをUTF-8で解釈していましたが、FirefoxはBOMを無効にしてJSONを無効としていました。 –

+0

@ T.J.Crowder関連するRFCはどれですか? [WHATWGのエンコーディング仕様では、「バイトオーダーマーク(BOMとも呼ばれる)は他のものよりも信頼性が高い」と記載されています。](https://encoding.spec.whatwg.org/#specification-hooks)。もちろん、正しく処理するには、charset =を含める必要があります。 – Andrea

3

CSS自体でエンコーディングを宣言するためのJavaScript構造体ではありません。エンコードは、データを配信するときに受信者に通知する必要があります。電子メール添付ファイルとしてファイルを送信する場合、電子メールプログラムは、エンコードを示すContent-Typeヘッダーとともにエンコードすることもあれば、エンコードの内容を把握するのが難しい場合もあります。

UTF-8でエンコードされたファイルの先頭のバイトオーダーマーク(BOM)も使用できます。 UTF-8でバイトオーダの問題はありませんが、BOMは有用なインジケータとして機能します.BOMをUTF-8エンコーディングで構成するバイトで始まるファイルは、おそらくUTF-8エンコードされています。これは、他の指示がない場合、プログラムが符号化を十分に推論する理由です。もちろんこれは100%信頼できるものではありませんが、有用なものです。

多くのテキストエディタでは、ファイルを「BOMでエンコードされたUTF-8」として保存することができます。

(ブラウザが文字データとして扱うことが観察されたので、Webページ上で、BOMはかつて、危険とみなされた。これらの日、でもUTF-8でBOMはむしろ危険性よりも有用です。)

3

ファイルのエンコーディングを人間が判読可能な方法で表示することに興味がある場合は、T.J. Crowder'sアイデア(// Encoding: UTF-8のようなコメントをファイルに追加する)は単なるものです。 Jukka K. Korpelaが指摘しているように、BOMも使用できます。

しかし、あなたは文書で宣言されている文字セットを示すために、機械読み取り可能な方法をしたい場合は、他のいくつかの方法があります。

例えば、Apacheのhttpdのサーバ上の次の宣言のいずれかを使用する場合があります:

  1. AddDefaultCharset UTF-8
  2. AddCharset UTF-8 .js
  3. AddType 'application/javascript; charset=UTF-8' js *

* を使用してケースを作成することに興味はありません。"text/javascript"です。しかし、あなたがどちらか一方がなぜ好ましいかを知ることに興味があるなら、cf. https://stackoverflow.com/a/4101763/1070047。しかし、トピックを考えると、application/javascriptは非常に適切と思われます(特に、BOMを使用する場合は、コードをバイナリとして扱う必要があるため)。

コードが解釈された場合は処理/ /コンパイルされ、サーバー側(例えばPHP)、あなたは

header("Content-Type: application/javascript; charset=utf-8");

は、少なくともPHP内で、そのヘッダを追加してください...例えば、文書のヘッダーを設定することができます文が出力される前に実行されます。

最後に、どの宣言を使用するかを決定する際には、BOMが文書ヘッダーよりも大きな権限を持っていることを理解している/尊重していると考えます。両方とも、リンクされた/ソースの文字セット宣言(例えば<script type="application/javascript" src="script.js" charset="utf-8"></script>など)よりも優先されます。

関連する問題