HTMLでのUnicode記号の表示


89

HTMLページにティック(✔)とクロス(✘)の記号を表示したいのですが、ボックスまたはグープとして表示されます。これは明らかにエンコーディングと関係があります。

メタタグをutf-8を表示するように設定しましたが、明らかに何かが足りません。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

編集/解決策:行われたコメントから、FireBugを使用して、ページから渡されるヘッダーが実際には「Content-Type:text / html」であり、UTF-8ではないことがわかりました。Notepad ++を使用してファイル形式を見ると、私のファイルは「BOMなしのUTF-8」としてフォーマットされていることがわかりました。これをUTF-8だけに変更すると、シンボルが正しく表示されるようになりました...しかし、firebugは同じコンテンツタイプを示しているようです。

回答:


56

HTTPサーバーのヘッダーが正しいことを確認する必要があります。

特に、ヘッダー:

Content-Type: text/html; charset=utf-8

存在する必要があります。

HTTPヘッダーが存在する場合、メタタグはブラウザによって無視されます。

また、ファイルを提供する前に、ファイルが実際にUTF-8としてエンコードされていることを確認し、以下を確認/試してください。

  • エディタがUTF-8として保存していることを確認してください。
  • FTPまたはファイル転送プログラムがファイルを台無しにしないことを確認してください。
  • のようなHTMLエンコードされたエンティティで試してください&#uuu;
  • 確かに、ファイルを16進ダンプし、文字のように見えます。✔の場合は、E2 9C94である必要があります。

注:システムがグリフを見つけられない(その文字を含むフォントがない)Unicode文字を使用する場合、ブラウザーは疑問符または記号のようなブロックを表示する必要があります。しかし、あなたのように複数のローマ字が表示される場合、これはエンコーディングの問題を示しています。


実際には、メタタグは無視されませんが、HTTPヘッダーが優先されます。その精度をコンラッドに感謝します。

8
contentCSS::beforeセレクターのプロパティでUnicode文字を使用するには、バックスラッシュ表記を使用する必要があることに注意してください。例:「&#2713」の代わりに「\ 2713」。
Fabien Snauwaert 2016

18

私は答えがすでに受け入れられていることを知っていますが、いくつかのことを指摘したいと思いました。

content-typeおよびを設定することcharsetは明らかに良い習慣です。サーバー上でそれを行うことは、アプリケーション全体の一貫性を保証するため、はるかに優れています。

ただし、UTF-8アプリケーションの言語で、UTF-8文字セットでのみ使用できる文字が多数使用されている場合にのみ使用します。いずれかの場合にUnicode文字または記号を表示したい場合charsetは、ページのを変更せずに表示できます。

HTMLレンダラーは、ページで記号について言及している限り、ページのエンコード文字セットの一部ではない記号を常に表示できますnumeric character reference (NCR)。奇妙に聞こえますが、本当です。

したがって、のhtmlエンコーディングansiまたはいずれかのiso文字セットがあることを示すヘッダーがある場合でも、そのhtml文字参照を10進数で使用してチェックマークを表示できます-&#10003; または16進数-&#x2713;

そのため、ページでこの問題に直面している理由を理解するのは少し難しいです。NCR値が正しいかどうかを確認できますか?これは良いリファレンスですhttp://www.fileformat.info/info/unicode/char/2713/index.htm


6
「ただし、アプリケーションの言語でUTF-8文字セットでのみ使用可能な文字が多数使用されている場合にのみUTF-8を使用します」なぜですか。切り替えのデメリットは何ですか?
ダンブルダッド2015年

3
@dumbledad:非常に良い質問です、私は自分の偏見に私の答えを曇らせたと思います。私が言いたかったのは、アプリケーション全体がすでにutf-8以外である場合、単一ページのアプリケーションビデオを変更するのは手間がかかりすぎる可能性があるということでした。また、プログラミング言語とコンテンツにutf-8文字が必要ない場合は、エディターで問題のないジャンク文字を誤ってコピーして貼り付けることができますが(utf-8モードであるため)、コードは実行中に失敗します。そうは言っても、
可能であれば

6

実際にファイルをUTF-8として保存するか&#nnn;、特殊文字にHTMLエンティティ()を使用するようにしてください。


✔のHTMLエンティティがないようですか、それとも見逃しましたか?ファイルを「実際に」UTF-8としてどのように保存し、どのように確認できますか?
ピータークレイグ

@ピーター:まともなエディターを使用して。ほとんどのテキストエディタには、[名前を付けて保存]ダイアログにファイルエンコーディングを指定するオプションがあります。または、メニューのどこかに別のオプションが非表示になっています。Vimはこのfileencoding設定を使用します。
Konrad Rudolph

8
@Peter、コードで任意の文字を参照できます。&#x2714;をお試しください ダニのために。
ダン・ダイアー

utf-8として保存します。興味深いコンセプト。静的なHTMLページを作成している場合にうまく機能します。しかし...動的なWebページはどうですか?このunicode / utf-8 /ワイド文字のものは、私には本当にかなり混乱しています。私のバックエンドコードはperlです。httpヘッダーが適切に設定されているので、htmlヘッダーも適切に設定されています。W3C Internationalization Checkerは、ドキュメントがutf-8に設定されていることを確認します。CaSinGは重要ですか?最後に、テキスト入力ボックスはどうですか?私はまだグープを取得します!:(
JarettLloyd19年

前のコメントへの補遺:私のデータベースは、データが正しく入力され、文字が正しく表示されていることを示しています。したがって、データベースの問題ではありません。私のperlスクリプト(というより、エディター)は、スクリプトをutf-8として保存するように設定されています。私のサーバーapache2は、干渉していないか、正しく設定されていると確信しています。とはいえ、なぜ文字がグープなのかはまだわかりません。うーん。より良い方法が必要です
JarettLloyd19年

5

Nicolasによって提案されたものとは異なり、metaタグは実際にはブラウザによって無視されません。ただし、Content-TypeHTTPヘッダーmetaは、ドキュメント内のタグの存在よりも常に優先されます。

したがって、HTTPヘッダーを介して正しいエンコーディングを送信するか、このHTTPヘッダーをまったく送信しないようにしてください(非推奨)。metaタグは、主にHTTPトラフィックを介して送信されていない地元の文書のためのフォールバックオプションです。

HTMLエンティティの使用も回避策と見なす必要があります。これは、実際の問題を回避するためのヒントです。Webサーバーを適切に構成することで、多くの迷惑を防ぐことができます。


0

これはファイルの問題だと思います。ファイルをlatin-1のような1バイトのエンコーディングで保存しただけです。エディターをグーグルで検索し、ファイルをutf-8に設定する方法。

デフォルトでutf-8に設定されていないエディターがあるのはなぜだろうか。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.