这是问题所在:
在C#中,我从传统的ACCESS数据库中获取信息.在将内容交给我之前,.NET会将数据库的内容(在此问题的情况下为字符串)转换为Unicode.
如何将此Unicode字符串转换回其ASCII等效字符串?
-> (Extended) ASCII character ê (Extended ASCII 136) was inserted in the database. -> Either Access or the reading component in .NET converted this to U+02C6 U+0065 (MODIFIER LETTER CIRCUMFLEX ACCENT + LATIN SMALL LETTER E) -> I need the (Extended) ASCII character 136 back.
string myInput = Convert.ToString(Convert.ToChar(710)); byte[] asBytes = Encoding.ASCII.GetBytes(myInput);
但这不会导致94而是一个值为63的字节...
这是一个新的尝试,但它仍然不起作用:
byte[] bytes = Encoding.ASCII.GetBytes("ê");
好的,我们来详细说明.无论csgero和bzlm在正确的方向.
由于blzm的回复,我在wiki上查找了Windows-1252页面,发现它被称为代码页.代码页的维基百科文章中说明了以下内容:
这些" 扩展字符集 " 没有正式的标准; IBM仅将这些变体称为代码页,因为它一直用于EBCDIC编码的变体.
这导致我进入代码页437:
n与ASCII兼容的代码页,低128个字符保持其标准的US-ASCII值,并且可以在高128个字符中提供不同的页面(或字符集).例如,为北美市场构建的DOS计算机使用代码页437,其中包括法语,德语和一些其他欧洲语言所需的重音字符,以及一些图形线条绘制字符.
因此,代码页437是我称之为"扩展ASCII"的代码页,它具有ê作为字符136所以我查找了其他一些字符,它们似乎正确.
csgero附带了Encoding.GetEncoding()提示,我用它来创建以下语句来解决我的问题:
byte[] bytes = Encoding.GetEncoding(437).GetBytes("ê");