[.NET] UNICODE のファイルを Shift_JIS として読み込んだら、 当然文字化け …しないこともある (@@;
いやぁ、 驚いた。 f(^^;
テキストファイルの文字エンコーディングを Shift JIS から UTF-16 に変えたので、 そのファイルを Shift_JIS として読み込んでいる部分のユニットテストは、 当然コケるはず… と、 確認のためにテストを流したら。 通っちゃったんですねぇ。
※ 「ユニットテストがコケてないなら、 コードを修正するべからず。 ( リファクタリングは別 )」 って TDD の原則から、 引数から GetEncoding("Shift_JIS") を削らなきゃいけないハズと分かっていても、 ユニットテストを流してみるんです。 原則通りにやってると、 たまにこういうことに遭遇します。
あんまり驚いたので、 MSDN ライブラリに追記しときました。 f(^^;
MSDN ライブラリ: ReadAllLines メソッド (String, Encoding)
ファイルを開き、指定したエンコーディングが適用されたファイルのすべての行を読み取った後、ファイルを閉じます。
Community Content
BOM 付き UNICODE のファイルの場合には encoding パラメーターは無視されます解説に、 「バイト順マークの存在に基づいて、ファイルのエンコーディングを自動的に検出することを試みます」 とあり、 検出対象として UTF-8 と UTF-32 が挙げられていますが、 UTF-16 でも BOM が付いていれば正しくエンコーディングが自動検出されるようです。 ( VS2008SP1@VistaSP2 で確認 )
この機能により、 自動検出に成功した場合は、 第2引数に指定した encoding は無視されることになります。
たとえば、 UTF-16 で書き出されたファイルを、 encoding に Shift_JIS を指定して File.ReadAllLines メソッドで読み込ませると、 直観的な予想に反して文字化けは起きません。
# え? それでどうしたかって? もちろん! TDD から外れて、 第2引数を削除しましたよ。
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント