2011-10-06 13 views
6

Visual Studio 2010を使用しています。私は、TortoiseHgがバイナリであると考えるresource.hファイルを持っているため、コミットウィンドウにdiffを表示しません。テキストエディタで簡単にファイルを開いて、それがプレーンテキストであることがわかります。なぜTortoiseHgはResource.hがバイナリだと思いますか?

関連する質問(Why does Mercurial think my SQL files are binary?)は、ファイルのエンコードと関連があることがわかりました。実際にNotepad ++でファイルを開くと、そのファイルは "UCS-2 Little Endian"になっています。これをどうすれば解決できますか?私は明らかに、Visual Studioの期待を破りたくはありません。

答えて

7

Mercurialは、表示目的でのみ、NUL バイトを含むすべてのファイルを、長年のUNIXの規則のためにバイナリとして扱います。これは、UTF-16(以前はUCS-2と呼ばれていたもの)を除いて、ちょうど正しいところです。ファイルの半分がNULバイトです!

内部的には、Mercurialはすべてのファイルを常にバイナリとして扱います。したがって、この問題は差分を表示するかどうかなどの問題にのみ関係します。

  • はUTF-16いくつかのウェブは「RESOURCE.H UTF検索
  • 以外のエンコーディングを使用して、Mercurialはうまく動作します

    +1

    Visual Studio内から、resource.hファイルを開き、メニューのFile-> Advanced Save Optionsに進み、エンコーディング「Unicode(UTF-8 with signature) - Codepage 65001」を選択しました。 2回のコミットの後、私は今、適切なdiffを見ることができます。 – User

    +1

    リソースエディタで編集した後、 "Unicode(署名付きUTF-8 - コードページ65001)"を選択すると、Visual StudioファイルではないファイルについてVisual Studioが苦情を受けます。代わりに私は "US-ASCII"を使用しました(この回答のリンクされたスレッドで説明されています)。おそらく問題はUTF-8の署名ですか?署名なしのオプションがありますが、今は問題を解決すると考えています。 – User

    +1

    署名不要のオプションを常に推奨します。 BOM(問題の署名)は、多くのプログラムで共通する問題の原因です。また、BOMがなくても、UTF-8とISO-8859-1の違いを自動検出するのは比較的簡単です。ASCII範囲外の文字が含まれていても、実際に値を追加するわけではありません。 –

    5

    は、明示的に変換/ UTF-8/ASCIIとご覧にエンコーディングを変更してみてください。メモ帳のEncodingメニュー(UTF-8でエンコードを選択)から行うことができます。

    Visual StudioはUTF-8ファイルで正常に動作します。

    +1

    これはVisual Studio 2008と2013でテストされた.rcファイルには当てはまりません。コンパイル時に "error RC2135:file not found:0x07"のようなエラーが発生します。 Resource.hはUTF-8でもかまいません。 –

    関連する問題