たとえば、私の Mac には f.txt ファイルがあり、システムは utf-8 でエンコードされています
その中には、utf-8 エンコードの漢字「日」というデータがあります。
実際に保存されているコンテンツは「xE6x97A5」です。ultraedit がそれを gb18030 エンコーディングとして解釈すると、ultraedit インターフェイス上で文字化けして表示されます。その後、gb18030でエンコードされたファイルとして保存されましたが、Macシステムで開くとUTF-8で正常に表示されました。
実際に保存されている内容は「xE6x97A5」で、utf-8として解釈され、「日」と表示されます
gb18030 エンコーディングとして直接保存すると、ultraedit がエンコーディングを自動的に変更します。つまり、「xE6x97A5」を「xC8xD5」に変更します。次に、vim はファイルを開き、ASCII エンコード解釈を呼び出します。
実際に保存されているデータは「xE6x97A5」であるのに、なぜエディターはそれを utf-8 エンコーディングとして解釈するのでしょうか? GBK で説明されている文字化けコードを取得したい場合はどうすればよいですか?
ドキュメントのバイナリヘッダーに何らかのタグが追加されているのでしょうか?その場合、このタグを表示するにはどうすればよいですか?
コーディングベースの意味解析はエディタ側で実行されますか?
迷茫2017-05-16 16:39:24
vim を例に挙げてみましょう
テキスト ファイルを開くとき、vim は特定のエンコード A に従って開き、特定のエンコード B に変換し、保存するときに別のエンコード C に変換します。他のテキスト エディターにも同様の設定がある場合があります。 vim として自動補完します。
エンコーディング B: ファイル全体には影響しません。これは、vim がオペレーティング システムと対話するときに使用されるエンコーディングです。
编码A
:使用 set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1
设置。vim 按照设置的顺序检查检测文件的编码。因为某些编码里不存在某些二进制序列的组合,所以如果检测到就认为不是这种编码,检查下一种编码,否则就认为是这一种。因为latin-1
可以出现任何二进制序列的组合,所以如果放到第一个,那么将永远以latin-1
ショー。
通常のバイナリファイルには文字コードマークはありません。しかし、Unicode にはゼロ幅スペースと呼ばれる特別なものがあります (FEFF
)而FFFE
是不存在的编码,所以在Unicode的标准里可以人为的在开始加入这个字符(这个字符在任何字体下都是没有宽度的,在中文字符里面没有任何的效果跟没有一样,是为了照顾东南亚某些语言的显示而设置的)。这样就便于文本编辑器检查字符和字节顺序,但是在代码里include
この種のファイルは問題を引き起こすことがよくあります (これは大きな落とし穴です。コンパイラーはこれが不正な文字であると判断しますが、ユーザーにはそれが表示されません)。
编码B
:set fileencoding=utf-8
、保存時に使用されるエンコーディングは、保存時に別のエンコーディングに自動的に変換されます。ただし、最初に開いたときに間違ったエンコーディングが認識された場合、存在しない文字は変換時に完全には変換されません。
そのため、gp18030として保存されたf1.txtはエンコード変換を実行できない可能性があります。
「問題は、実際に保存されているデータは「xE6x97A5」ですが、gb18030 エンコーディングを使用して説明します。これはどういう意味ですか?
PHP中文网2017-05-16 16:39:24
ファイルのエンコーディングは、それを保存する方法の実際のコード仕様です。まず、日
在UTF8
编码中是xE6x97A5
,你就不可能说采用GB18030
编码结果还为xE6x97A5
的日
言葉について質問に答えましょう。
エディターがテキスト ファイルのエンコーディングを識別する方法はいくつかあります。一部のファイル エンコーディングには Magic
ヘッダーがあり、最初の数バイトを直接識別することで完了できます。ただし、ほとんどのテキスト ファイルにはそのような識別コードがなく、完全にエディターに依存します。コンテキストとユーザーのロケールに基づいて推測します。