[.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引数を削除しましたよ。
| 固定リンク
「プログラミング」カテゴリの記事
- [勉強会@名古屋] 明日は、 わんくま同盟 名古屋勉強会 #10 ですよ~。 それと、 スピーカー交代のお知らせ。(2009.11.27)
- [記事] Silverlight 4 があれば Windows はいらなくなるの?(2009.11.27)
- [勉強会@名古屋] Silverlight を囲む会第1回 (2009/11/22) に参加してきました(2009.11.25)
- [.NET] TFS 2010 beta2 日本語版 ~ クライアント OS へのインストールと構成 (その3 : チームプロジェクトの作成)(2009.11.16)
- [.NET] VS2010: 痛 IDE には痛ソース、だよね~(2009.11.20)
掲示板
blog






コメント