2012-01-12 3 views
13

Możemy zadeklarować kodowanie znaków w pliku CSS indywidualnej według kodów poniżej:Jak zadeklarować kodowanie znaków w INDYWIDUALNYM pliku JS?

@charset "UTF-8";

Moje pytanie brzmi:

Jak deklarować kodowanie znaków w pliku INDYWIDUALNE JS?

Jeśli wyślę plik JS do mojego przyjaciela, mam nadzieję, że on (ona) może zrozumieć kodowanie tego pliku JS z samych kodów, kiedy on (ona) zaczyna przeglądać lub edytować ten plik JS.

Dziękujemy!

Odpowiedz

13

Nie możesz. Możesz jednak zdefiniować go w pliku script tag, który przenosi plik na stronę, używając charset attribute. Musi to pasować do charset, jeśli jest, w pliku Content-Type, któremu plik zostanie wyświetlony. Cytowanie:

Atrybut charset podaje kodowanie zewnętrznego zasobu skryptu. Atrybut nie może być określony, jeśli atrybut src nie jest obecny. Jeśli atrybut jest ustawiony, jego wartość musi być poprawną nazwą kodowania znaków, musi być to ASCII case-insensitive match dla tego kodowania i musi odpowiadać kodowi podanemu w danym pliku zewnętrznego, jeśli taki istnieje. [IANACHARSET]

Re edycję:

Gdybym wysłać plik JS do mojego przyjaciela, mam nadzieję, że może on (ona) to zrozumieć JS kodowanie znaków pliku jest od samych kodów, gdy on (ona) zacznie przeglądaj lub edytuj ten plik JS.

Za to wystarczy po prostu powiedzieć mu/jej. Jeśli plik jest w formacie UTF-8 lub Windows-1252 lub ISO 8859-1, niestety nie ma dostępnego w pliku wskaźnika kodowania, więc na początku powinienem dodać komentarz:

// Encoding: UTF-8 

Jeśli jednak używasz UTF-16 lub UTF-32, powinieneś być w stanie poinformować swojego redaktora, aby użył BOM, którą inni redaktorzy powinni zobaczyć i zrozumieć (jeśli są edytorami obsługującymi Unicode). Zwykle ma to zastosowanie tylko wtedy, gdy pisałeś komentarze w tekście (języku) wymagającym wielu znaków wielobajtowych, a jeśli masz wysoki stosunek komentarzy do kodu (ponieważ kod jest zapisany z tekstem zachodnim), chociaż oczywiście możesz używać dowolnych kodowań. Chodzi o to, że jeśli stosunek komentarzy do kodu jest niski, prawdopodobnie lepiej będzie trzymać się UTF-8, nawet jeśli komentarze są w tekście wymagającym dużej ilości czterobajtowych znaków, ponieważ kod będzie wymagać tylko jednego bajtu na znak . (W UTF-16 możesz mieć więcej komentarzy dwubajtowych zamiast czterobajtowych, ale kod zawsze wymagałby dwóch bajtów na znak, a w UTF-32 czterech bajtów na znak. plik może być większy, nawet jeśli komentarze zajmują mniej miejsca, ale tutaj prawdopodobnie mówię ci rzeczy, o których już wiesz, o wiele lepiej niż ja, jeśli dobrze zgaduję na temat twoich przyczyn tego pytania.)

+0

Można również dołączyć zestawienie komponentów dla UTF-8, a przeglądarki go respektują. – Andrea

+0

@Andrea: Nie wszystkie przeglądarki, niezawodnie. Ustawienie "zestawu znaków" odpowiedzi nie jest opcjonalne, odpowiedni dokument RFC wyraźnie stwierdza, że ​​bez niego odpowiedź to US-ASCII. Zaledwie kilka tygodni temu było pytanie o to, IE interpretowało żądanie JSON-a w UTF-8, ale Firefox odniósł się do BOM, nazywając go nieprawidłowym JSON. –

+0

@ T.J.Crowder Który odnośny dokument RFC? [Specyfikacja kodowania WHATWG mówi, że "znacznik kolejności bajtów (znany również jako BOM) jest bardziej autorytatywny niż cokolwiek innego"] (https://encoding.spec.whatwg.org/#specification-hooks).Oczywiście powinieneś dołączyć zestaw znaków = jeśli robisz to poprawnie. – Andrea

3

nie jest konstrukcją JavaScript do deklarowania kodowania w samym pliku, tak jak w CSS. Kodowanie powinno zostać przekazane odbiorcom podczas dostarczania danych.Podczas wysyłania plików jako załączników do wiadomości e-mail program poczty e-mail może zawierać lub nie zawierać nagłówków Content-Type, które wskazują kodowanie (ale może to być trudne w ustaleniu, jakie może być kodowanie).

Możesz również uzyskać znak kolejności bajtów (BOM) na początku pliku zakodowanego w UTF-8. Chociaż w UTF-8 nie ma problemu z kolejnością bajtów, LM działa jako przydatny wskaźnik - plik rozpoczynający się od bajtów, które tworzą zestawienie komponentów w kodowaniu UTF-8, jest prawdopodobnie kodowany w UTF-8. Dlatego programy mogą dobrze wnioskować o kodowaniu, w przypadku braku innych wskazań. Nie jest to oczywiście w 100% niezawodne, ale jest to przydatne.

Wiele edytorów tekstu ma opcję zapisania pliku jako "UTF-8 zakodowany za pomocą BOM".

(na stronach internetowych, BOM był kiedyś uważany za zagrożenie, ponieważ przeglądarek zaobserwowano ją traktować jako danych znakowych. Te dni, BOM nawet w UTF-8 jest przydatna niż ryzyko.)

3

Jeśli jesteś zainteresowany wskazaniem kodowania pliku w czytelny dla człowieka sposób, pomysł T.J. Crowder's (dodanie komentarza do pliku, takiego jak // Encoding: UTF-8) jest właśnie tym. I jak wskazano Jukka K. Korpela, można również użyć BOM.

Ale jeśli chcesz drogę do odczytu maszynowego, aby wskazać zestaw znaków, który jest zadeklarowany w dokumencie istnieje kilka innych sposobów:

na przykład na serwer httpd Apache można użyć jednego z następujących deklaracji :

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

* Nie jestem zainteresowany złożeniem sprawy dotyczącej używania "application/javascript" przez "text/javascript". Ale jeśli chcesz wiedzieć, dlaczego jeden lub drugi może być lepszy, cf. https://stackoverflow.com/a/4101763/1070047. Biorąc pod uwagę ten temat, wydaje się całkiem odpowiedni (zwłaszcza jeśli zamierzasz użyć BOM, ponieważ wskazuje, że kod powinien być traktowany jako plik binarny).

Jeśli kod zostanie zinterpretowany/przetworzonych/skompilowany po stronie serwera (np PHP), można ustawić nagłówki w dokumencie, np ...

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

przynajmniej w PHP, należy dodać, że nagłówek instrukcja przed każdym wyjściem.

Na koniec, przy ustalaniu, która deklaracja ma być używana, należy wziąć pod uwagę, że (gdy jest to zrozumiane/honorowane, tj. Nie w IE) specyfikacja materiałowa ma większe uprawnienia niż nagłówki dokumentów. Oba mają pierwszeństwo przed połączonymi/pochodzącymi deklaracjami zestawów znaków (np. <script type="application/javascript" src="script.js" charset="utf-8"></script>).