gpt4 book ai didi

c# - 克隆编码但关闭 BOM

转载 作者:行者123 更新时间:2023-12-02 05:18:39 28 4
gpt4 key购买 nike

假设我有一个编码:

Encoding enc;

当这个编码被传递给我时,它被设置为发出一个 BOM。我对 BOM 不感兴趣。我系统中的编码是用 header 处理的。

假设编码是不可变的...我想创建一个与现有编码完全匹配的新编码,但将不再发出 BOM。

这样我就可以避免以下不匹配:

var data = "áéíóúñ";
var enc = Encoding.UTF8;
long count1 = (long) enc.GetByteCount(data);
long count2;
using(var ms = new MemoryStream())
using(var sw = new StreamWriter(ms, enc))
{
sw.Write(data);
sw.Flush();
count2 = ms.Length;
}
count1.Dump(); //12
count2.Dump(); //15 , oops... BOM was also written

最佳答案

var enc = UTF8Encoding(false); // UTF-8 without BOM

如果你事先不知道编码,那么你需要一些额外的逻辑,例如

switch(enc.CodePage) {
case 65001:
enc = UTF8Encoding(false);
break;
case 1200:
enc = UnicodeEncoding(false, false);
break;
case 1201:
enc = UnicodeEncoding(true, false);
break;
case 12000:
enc = UTF32Encoding(false, false);
break;
case 12001:
enc = UTF32Encoding(true, false);
break;
default:
// pass through the original enc unchanged
}

关于c# - 克隆编码但关闭 BOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233973/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com