顧客プロジェクトの場合、DB に対してクエリが実行され、結果がファイルに書き込まれます。このファイルは、後で別のレガシー システムの入力として使用されるため、シフト JISである必要があります。ウィキペディアの記事は、次のことを示しています。
シングルバイト文字 0x00 から 0x7F は、それぞれ ASCII 文字セットのバックスラッシュとチルダの代わりに 0x5C の円記号 (U+00A5) と 0x7E のオーバーライン (U+203E) を除いて、ASCII エンコーディングと一致します。
いくつかのテスト中に、円記号 (U+00A5) が正しく 0x5C になる一方で、上線 (U+203E) が予想される 0x7E ではなく 0x3F (疑問符) になることを確認しました。
StreamWriter を使用してファイルに通常の出力を行っていますが、以下は再現するための最小限のコードです。
static void Test()
{
// Get Shift-JIS encoder.
var encoding = Encoding.GetEncoding("shift_jis");
// Declare overline (U+203E).
char c = (char) 0x203E;
// Get bytes when encoded as Shift-JIS.
var bytes = encoding.GetBytes(c.ToString());
// Expected 0x7E, but the value returned is 0x3F.
}
この動作は正しいですか? EncoderFallback をサブクラス化できると思いますが、これは、最初から動作すると予想していたものよりもはるかに多くの作業のように思えます。