当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将Unicode字符转换为其ASCII等效字符》经验,为你挑选了1个好方法。

这是问题所在:

在C#中,我从传统的ACCESS数据库中获取信息.在将内容交给我之前,.NET会将数据库的内容(在此问题的情况下为字符串)转换为Unicode.

如何将此Unicode字符串转换回其ASCII等效字符串?


编辑
Unicode char 710确实是MODIFIER LETTER CIRCUMFLEX ACCENT.这个问题更准确一点:

 -> (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("ê");


Soltution
由于csgero和bzlm指向正确的方向我在这里解决了问题.



1> Huppie..:

好的,我们来详细说明.无论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("ê");


请参阅Unicode规范化主题,特别是两种形式的等价:规范和兼容性 - http://en.wikipedia.org/wiki/Unicode_normalization在.NET String实例上,调用Normalize方法,传递NormalizationForm.FormD或NormalizationForm.FormKD ,对应于规范和兼容性**分解**形式.例如,在像"êwś"这样的字符串上调用它将生成字符串"e ^ ws".你也可以反过来,通过调用Normalize(NormalizationForm.FormC)或Normalize(NormalizationForm.FormKC)将像"e ^"这样的字符串转换为"ê".
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有