ホームページ  >  に質問  >  本文

macos - ファイルのエンコードメカニズムとは何ですか?

たとえば、私の Mac には f.txt ファイルがあり、システムは utf-8 でエンコードされています
その中には、utf-8 エンコードの漢字「日」というデータがあります。

次に、ultraedit を使用して f.txt を次のファイルとして保存しました:

  1. f1.txt ファイル

    実際に保存されているコンテンツは「xE6x97A5」です。ultraedit がそれを gb18030 エンコーディングとして解釈すると、ultraedit インターフェイス上で文字化けして表示されます。その後、gb18030でエンコードされたファイルとして保存されましたが、Macシステムで開くとUTF-8で正常に表示されました。

  2. f2.txtファイル

    実際に保存されている内容は「xE6x97A5」で、utf-8として解釈され、「日」と表示されます

  3. f3.txt ファイル

    gb18030 エンコーディングとして直接保存すると、ultraedit がエンコーディングを自動的に変更します。つまり、「xE6x97A5」を「xC8xD5」に変更します。次に、vim はファイルを開き、ASCII エンコード解釈を呼び出します。

ここで疑問が生じます。

実際に保存されているデータは「xE6x97A5」であるのに、なぜエディターはそれを utf-8 エンコーディングとして解釈するのでしょうか? GBK で説明されている文字化けコードを取得したい場合はどうすればよいですか?
ドキュメントのバイナリヘッダーに何らかのタグが追加されているのでしょうか?その場合、このタグを表示するにはどうすればよいですか?
コーディングベースの意味解析はエディタ側で実行されますか?

怪我咯怪我咯2712日前680

全員に返信(2)返信します

  • 迷茫

    迷茫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この種のファイルは問題を引き起こすことがよくあります (これは大きな落とし穴です。コンパイラーはこれが不正な文字であると判断しますが、ユーザーにはそれが表示されません)。

    编码Bset fileencoding=utf-8、保存時に使用されるエンコーディングは、保存時に別のエンコーディングに自動的に変換されます。ただし、最初に開いたときに間違ったエンコーディングが認識された場合、存在しない文字は変換時に完全には変換されません。

    そのため、gp18030として保存されたf1.txtはエンコード変換を実行できない可能性があります。

    「問題は、実際に保存されているデータは「xE6x97A5」ですが、gb18030 エンコーディングを使用して説明します。これはどういう意味ですか?

    返事
    0
  • PHP中文网

    PHP中文网2017-05-16 16:39:24

    ファイルのエンコーディングは、それを保存する方法の実際のコード仕様です。まず、UTF8编码中是xE6x97A5,你就不可能说采用GB18030编码结果还为xE6x97A5言葉について質問に答えましょう。

    エディターがテキスト ファイルのエンコーディングを識別する方法はいくつかあります。一部のファイル エンコーディングには Magic ヘッダーがあり、最初の数バイトを直接識別することで完了できます。ただし、ほとんどのテキスト ファイルにはそのような識別コードがなく、完全にエディターに依存します。コンテキストとユーザーのロケールに基づいて推測します。

    返事
    0
  • キャンセル返事