none
关于ASCII与UNICODE的菜鸟问题 RRS feed

  • 问题

  • DrawTextA不是输出ASCII字符的吗?为什么可以用来输出中文?当我用DrawTextW时输出记事本的内容时,为什么会是乱码?

    2008年6月13日 15:02

答案

  • 双字节和单字节的区别不在这里,跟是不是中文没有关系。

     

    单字节下,ab 是 6162,“中文”是 D6D0CEC4 ,相当于4个英文占的位置

    在多字节下,如unicode,“中文”就变成 2D4E8765 了,而ab变成了 61006200,大家都占4个字节,长度和代码都有变化。

     

    所以只要用ascii输出 D6D0CEC4 ,那么显示的就是“中文” (理由是你是中文系统,系统调用字库认为是这两个字,如果是别的语言系统,那么就是别的字了)。

     

    同样,你用DrawTextW输出记事本时,要弄清楚记事本里的是什么编码的,如果是ascii,那么输出的就是乱码,理由就是上面“中文”两个字的代码变化的原因。

    2008年6月14日 12:17
  • 不要把概念搞混了。

    ASCII和UNICODE的区别是单字节和双字节

    中文和英文的区别是中文用两个字节表示一个汉字,字母用一个字节表示。

     

    2008年6月15日 3:29
    版主

全部回复

  • 双字节和单字节的区别不在这里,跟是不是中文没有关系。

     

    单字节下,ab 是 6162,“中文”是 D6D0CEC4 ,相当于4个英文占的位置

    在多字节下,如unicode,“中文”就变成 2D4E8765 了,而ab变成了 61006200,大家都占4个字节,长度和代码都有变化。

     

    所以只要用ascii输出 D6D0CEC4 ,那么显示的就是“中文” (理由是你是中文系统,系统调用字库认为是这两个字,如果是别的语言系统,那么就是别的字了)。

     

    同样,你用DrawTextW输出记事本时,要弄清楚记事本里的是什么编码的,如果是ascii,那么输出的就是乱码,理由就是上面“中文”两个字的代码变化的原因。

    2008年6月14日 12:17
  • 不要把概念搞混了。

    ASCII和UNICODE的区别是单字节和双字节

    中文和英文的区别是中文用两个字节表示一个汉字,字母用一个字节表示。

     

    2008年6月15日 3:29
    版主