对于客户项目,查询数据库并将结果写入文件。该文件需要在Shift JIS中,因为它稍后用作另一个旧系统的输入。维基百科文章指出:
单字节字符 0x00 到 0x7F 匹配 ASCII 编码,除了 0x5C 处的日元符号 (U+00A5) 和 0x7E 处的上划线 (U+203E) 分别代替 ASCII 字符集的反斜杠和波浪号。
在一些测试中,我验证了日元符号 (U+00A5) 正确变为 0x5C 时,上划线 (U+203E) 变为 0x3F(问号)而不是预期的 0x7E。
当我使用 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 子类化,但这对于我从一开始就期望工作的东西来说似乎要工作得多。