問題タブ [byte-order-mark]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
410 参照

perl - Why can't I use the map function to create a good hash from a simple data file in Perl?

The post is updated. Please kindly jump to the Solution part, if you've already read the posted question. Thanks!

Here's the minimized code to exhibit my problem:

The input data file for test has been saved by Window's built-in Notepad as UTF-8 encoding. It has the following three lines:

The Perl script file has also been saved by Window's built-in Notepad as UTF-8 encoding. It contains the following code:

In the output, the hash table seems to be okay:

But it is actually not, because I only get two values instead of three:

Perl gives the following warning message:

Use of uninitialized value $hash{"abacus"} in string at C:\test2.pl line 11, <$i n> line 3.

where's the problem? Can someone kindly explain? Thanks.

The Solution

Millions of thanks to all of you guys :) Now finally the culprit is found and the problem becomes fixable :) As @Sinan insightfully pointed out, I'm now 100% sure that the culprit for causing the problem I described above is the two bytes of BOM, which Notepad added to my data file when it was saved as UTF-8 and which somehow Perl does not treat properly. Although many suggested that I should use "<:utf8" and ">:utf8" to read and write files, the thing is these utf-8 configurations do not solve the problem. Instead they may cause some other problems.

To really solve the problem, all I actually need is to add one line of code to force Perl to ignore the BOM:

Now, the output is exactly what I expected:

Please note the script is saved as UTF-8 encoding and the code does not have to include any utf-8 labels because the input file and the output file are both pre-saved as UTF-8 encoding.

Finally thanks again to all of you. And thank you, @Sinan, for the insightful guidance. Without your help, I would stay in the dark for God know how long.

Note To clarify a little more, if I use:

The output is this:

And the warning message:

0 投票する
1 に答える
3110 参照

php - WordPress によって自動生成された PHP ページの BOM

私は2つの異なるブログを管理しています。どちらも wordpress 2.8.6 です (したがって、ソース コードはまったく同じで、プラグインは異なります) が、2 つの異なるホスティング プラットフォーム (hostmonster.com と aruba.it) に配置されています。私の問題を説明するために、SmartSniff を使用して各サイトとのセッションをダンプしました。

以下は、hostmonster からのダンプです。

そして今アルバから:

(注: a6 と 100b は、SmartSniff によって報告されたパケット サイズです)

OK、大きな違いは<!DOCTYPEin aruba の前にある 3 つのドットです。それらは UTF-8 BOM (0xef 0xbb 0xbf) です。

両方のサーバーで同じ PHP ソースを使用しているのに、一方のサーバーにしか表示されないのはなぜですか?

投稿者が故意に BOM を挿入できないようにコンテンツが生成されます。また、テンプレートが BOM なしであることも確認しました。当然、サーバーにはさまざまな PHP と Apache のバージョンがあります... 問題を診断して解決するために、何を確認または設定できますか? ところで、BOM は必要ありません。

よろしくお願いします。

0 投票する
11 に答える
85194 参照

java - バイトオーダーマークが Java でのファイル読み取りを台無しにする

Java を使用して CSV ファイルを読み込もうとしています。一部のファイルには、最初にバイト オーダー マークがある場合がありますが、すべてではありません。存在する場合、バイト順は最初の行の残りと一緒に読み取られるため、文字列の比較で問題が発生します。

存在するときにバイトオーダーマークをスキップする簡単な方法はありますか?

0 投票する
1 に答える
1089 参照

xml - MSXMLWriter60 が UTF-16 エンコーディングの byteOrderMark を出力しない

「XMLDOMDocument に XML 宣言を含めるにはどうすればよいですか?」で見られるコードのバリアントを使用しています。(これはMSDNでも見ることができます。エンコーディングを「UTF-16」に変更すると、UTF-16 として出力されると思われます...そして、テキスト エディターで出力を見ると「そうします」... ; しかし、16 進エディタでチェックすると、(プロパティが true に設定されているにもかかわらず) バイト オーダー マークが欠落しており、XML エディタは BOM が欠落しているためにドキュメントを無効な UTF-16 として拒否します。

私は何を見落としていますか?

出力は次のようになります。


なぜ VB6 を使用しているのですか? 実際には VBA (同世代、VB6 のわずかなサブセット) であり、EMC-Captiva の InputAccel/FormWare のスクリプト言語として使用されるため、切り替えはオプションではありません。

0 投票する
3 に答える
4734 参照

utf-8 - UTF-8 ファイルを ASCII/ANSI として誤ってエンコードするのを避けるには?

[スプリアス] BOM なしの UTF-8 としてエンコードされたファイルを編集する過程で、コンテンツに ASCII または ANSI 範囲外の Unicode 文字が含まれなくなる場合があります。次にファイルを再度開いたときに、一部のテキスト エディター (メモ帳++) は、ASCII/ANSI エンコードとして解釈し、そのように開きます。ユーザーは変更を認識せずに編集を続け、ANSI で保存されているため、レンダリングされても役に立たない非 ANSI Unicode 文字を追加します。ANSI ファイルを BOM なしの UTF-8 として開くためのメニュー オプション (Notepad++) が存在する可能性がありますが、Unicode エンコーディングで ANSI ファイルを誤ってオーバーライドするという逆の問題が発生する可能性があります。

0 投票する
3 に答える
2562 参照

unicode - UTF-16LE と UTF32-LE の Unicode BOM

UTF16-LE と UTF-32LE で使用されるバイト オーダー マークにはあいまいさがあるようです。特に、次の 8 バイトを含むファイルを考えてみましょう。

このファイルに次のものが含まれているかどうかを確認するにはどうすればよいですか。

  1. UTF16-LE BOM (FF FE) の後に 3 つのヌル文字が続きます。また
  2. UTF32-LE BOM (FF FE 00 00) の後に 1 つのヌル文字が続く?

Unicode BOM はhttp://unicode.org/faq/utf_bom.html#bom4で説明されていますが、このあいまいさについての議論はありません。何か不足していますか?

0 投票する
3 に答える
1101 参照

iphone - NSXMLParser と BOM バイト

一部のサーバーからのphpクエリの結果として、xmlファイルを取得しています。結果のデータをコンソールに出力すると、適切に構造化された xml ファイルが得られます。NSXMLParser を使用して解析しようとすると、コード 4 - 空のドキュメントで NSXMLParserErrorDomain が返されます。解析できなかった xml には、xml ヘッダーの '>' マークを閉じた直後に BOM (バイト オーダー マーク) シーケンスがあることがわかりました。問題は、BOM シーケンスを削除する方法です。そのような BOM バイトで文字列を作成しようとしました:

しかし、何らかの理由で機能しません。ルート要素の後にこのシーケンスを持つ xml があります。この場合、NSXMLParser は xml を正常に解析します。Safari はこれらの文字を無視します。だからXcodeデバッガ。助けてください!

ありがとう、

ナバ

0 投票する
1 に答える
990 参照

css - UTF-8でエンコードされたCSSファイルの開始時にVisualStudioにBOMを尊重させるにはどうすればよいですか?

どうやら、Visual Studio 2008(SP1)がCSSファイルを開くと、UTF8 BOMマーカーをBOMとして認識せず、代わりにテキストとして解釈します(最初の3文字はとして表示されますが、表示されるべきではありません)。VSは通常CSSファイルをBOMと一緒に保存しませんが、IDEがBOMを認識し、そこにあるときにそれを尊重することを期待します。

これはVisualStudioのバグである可能性がありますが、回避策を知っている人はいますか?

0 投票する
1 に答える
3283 参照

xml - バイト配列からXMLDocumentをロードします(オプションでBOM文字を含みます)

データにMicrosoft独自のUTF-8プリアンブル(たとえば、これ)が含まれているデータソースからのXMLドキュメントのロードに関するSOに関するいくつかの投稿を見てきました。
ただし、BOM文字を手動で削除する必要のないエレガントな(そして機能する!)ソリューションを見つけることができません。

たとえば、次のがあります。

...しかし、それでも「無効なデータ」例外をスローし続けます。

私の問題は、BOMを含む場合と含まない場合がある、巨大なバイト配列を持っていることです。XMLDocumentにロードする必要があります。そして、私は「ヘルパー」バイトの世話をしなければならない人だとは思いません。

0 投票する
21 に答える
707979 参照

unicode - BOMなしのUTF-8とUTF-8の違いは何ですか?

BOMなしのUTF-8とUTF-8の違いは何ですか?どちらが良いですか?