一尘不染

如何将Unicode字符转换为其等效的ASCII

c#

这是问题所在:

在C#中,我从旧的ACCESS数据库中获取信息。在将内容交给我之前,.NET将数据库的内容(在这种情况下为字符串)转换为Unicode。

如何将该Unicode字符串转换回等效的ASCII?


编辑
Unicode char 710确实是MODIFIER LETTER CIRCUMFLEX ACCENT。这是更精确的问题:

 ->(扩展)ASCII字符ê(扩展ASCII 136)已插入数据库中。
 -> Access或.NET中的阅读组件都将其转换为U + 02C6 U + 0065
    (修饰符大写字母重音+拉丁文小写字母E)
 ->我需要返回(扩展)ASCII字符136。

这是我尝试过的方法(现在我知道为什么它不起作用了……):

string myInput = Convert.ToString(Convert.ToChar(710));
byte[] asBytes = Encoding.ASCII.GetBytes(myInput);

但这不会产生94,而是一个值63的字节。
这是一个新尝试,但仍然无法正常工作:

byte[] bytes = Encoding.ASCII.GetBytes("ê");

解决方案
由于csgerobzlm都指出了正确的方向,所以在这里解决了这个问题。


阅读 212

收藏
2020-05-19

共1个答案

一尘不染

好吧,让我们详细说明。无论csgerobzlm在正确的方向。

由于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("ê");
2020-05-19