web-dev-qa-db-ja.com

INDIVIDUAL JSファイルで文字エンコードを宣言するにはどうすればよいですか?

以下のコードにより、INDIVIDUALCSSファイルで文字エンコードを宣言できます。

@charset "UTF-8";

私の質問は:

INDIVIDUAL JSファイルで文字エンコードを宣言するにはどうすればよいですか?

私がJSファイルを友人に送る場合、彼(彼女)がこのJSファイルを閲覧または編集し始めたときに、コード自体からこのJSファイルの文字エンコードを理解できることを願っています。

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

15
weilou

できません。ただし、 script属性 を使用して、ファイルをページに取り込む charsetタグ で定義できます。これは、ファイルを提供するContent-Type内のcharsetと一致する必要があります(存在する場合)。引用:

charset属性は、外部スクリプトリソースの文字エンコードを提供します。 src属性が存在しない場合は、属性を指定しないでください。属性が設定されている場合、その値は有効な文字エンコード名である必要があり、 ASCII大文字と小文字を区別しない一致優先MIME名 そのエンコードの場合、 Content-Typeメタデータのcharsetパラメータで指定されたエンコーディングと一致する必要があります もしあれば、外部ファイルの [IANACHARSET]

編集をやり直してください:

私がJSファイルを友人に送る場合、彼(彼女)がこのJSファイルのブラウザー処理または編集を開始するときに、コード自体からこのJSファイルの文字エンコードを理解できることを願っています。

そのためには、ほとんど彼/彼女に言う必要があります。ファイルがUTF-8、Windows-1252、またはISO 8859-1の場合、残念ながら、使用可能なエンコーディングのファイル内インジケータがないため、次の行に沿って最初にコメントを含めます。

// Encoding: UTF-8

ただし、UTF-16またはUTF-32を使用している場合は、他の編集者が見て理解する必要がある [〜#〜] bom [〜#〜] を使用するように編集者に指示できるはずです( Unicode対応のエディターの場合)。これは通常、多くのマルチバイト文字を必要とするテキスト(言語)でコメントを書いている場合、およびコードに対するコメントの比率が高い場合(コードは西洋のテキストで書かれているため)にのみ当てはまりますが、もちろんです。好きなエンコーディングを使用できます。コメントとコードの比率が低い場合は、コメントが4バイトの文字を多く必要とするテキストであっても、コードは1文字あたり1バイトしか必要としないため、UTF-8を使用したほうがよいでしょう。 。 (UTF-16では、コメントに4バイト文字ではなく2バイト文字が含まれる場合がありますが、コードには常に1文字あたり2バイトが必要です。また、UTF-32では、1文字あたり4バイトが必要です。コメントのスペースが少なくても、ファイルは大きくなる可能性があります。ただし、質問の理由を正しく推測している場合は、ここで、私よりもはるかによく知っていることを伝えていると思います。)

14
T.J. Crowder

人間が読める形式でファイルのエンコーディングを示すことに興味がある場合は、 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 *

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

コードがサーバー側(PHPなど)で解釈/処理/コンパイルされる場合は、ドキュメントにヘッダーを設定できます。例:…

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

少なくともPHP内では、出力を行う前に必ずそのヘッダーステートメントを追加してください。

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

3
David Eldridge

CSSでできるように、ファイル自体でエンコーディングを宣言するためのJavaScript構造はありません。エンコーディングは、データを配信するときに受信者に伝達する必要があります。ファイルを電子メールの添付ファイルとして送信する場合、電子メールプログラムには、エンコードを示すContent-Typeヘッダーが含まれる場合と含まれない場合があります(ただし、エンコードが何であるかを理解するのは難しい場合があります)。

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

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

(Webページでは、ブラウザがBOMを文字データとして扱うことが観察されたため、BOMはかつてはリスクと見なされていました。最近では、UTF-8でもBOMはリスクよりも有用です。)

3