none
VS2008打开项目源代码中有乱码,且不能通过编译。 RRS feed

  • 问题

  •   这个情况之前也出现过,这次是编译 tinyxml库时出现, 启动解决方案后,很多源文件因为含有不能用 cp936解码的字符,因而显示乱码。不过按我的理解编译应该是没有问题的啊?

    找到错误的地方发现字符串的乱码:
     const
    
      char
    
     * str =
                            "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"
    
    
    
                            "<?"
    
    
    
                            "C鰊t鋘t咪鳇闹?
                            "</?"
    
    
    ;
    
    
      倒数第二行提示错误:error C2001: 常量中有换行符

     我感觉应该是VS在打开文件是自动做了编解码工作,因而对原有文件进行了修改? 请问如何解决? (确定不是源码本身的问题,都是官网下载的,而且以前编译其他工程也出现过类似情况,因为出错地方少,手动修改解决了)

     PS:我的平台是 Windows7 64位        VS2008
    2009年10月21日 11:14

答案

  • 你好!
         你的字符串常量不能分开几行写,如果要一行写不下,可以用"+"来连接字符串!
    周雪峰
    • 已标记为答案 YiChun Chen 2009年10月27日 7:54
    2009年10月23日 4:54
    版主

全部回复

  • 用记事本打开文件 另存为utf-8字符集编码
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://blog.tanging.net
    2009年10月21日 12:50
    版主
  • 你好!
         你这样设置看看:
         菜单-》文件-》高级保存选项-》设置成utf-8编码
    周雪峰
    2009年10月21日 13:56
    版主
  • 你好!

    周版主和Raymond版主的建议都很不错,你可以尝试一下。

    另外,你看看这两篇博客,试试这些方法看看有没有效果。
    http://blog.csdn.net/kevinojt/archive/2008/01/02/2009619.aspx
    http://www.cnblogs.com/RChen/archive/2006/10/17/vs2k5_issue.html

    希望对你有所帮助。


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年10月22日 12:59
  • 感谢大家的回复。 昨天一天没在线,没有及时回复,抱歉。

    上面的方法我都试了,不过仍然有问题。

    现在问题是,"xmltest.cpp"文件有乱码,且不能通过编译,但无论我在记事本或VS中选择utf-8或者unicode编码保存它,然后再打开,乱码仍然存在,且不能编译通过。

    正好出现乱码这块就是为了解析该乱码字符串的代码,有表明编码方式为ISO-8859-1,就是Latin-1(这个编码好像欧美很常用?), 我在VS中找到了latin-3打开,然后显示
                const char* str =
    "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"
    "<ä>"
    "CöntäntßäöüÄÖÜ"
    "</ä>";


    这个应该就是要显示的字符,但是显示正常,编译仍然有问题,仍提示 error C2001: 常量中有换行符

    我感觉应该是打开时,除了编码不同外,可能行尾设置也有问题。

    再试了几次后,解决了编译问题。

    使用VS中的高级保存选项将文件保存为 编码:UTF-8,代签名。行尾: Windows (CR LF)
    然后编译,出现一些warning,但是可以编译成功了。(编辑器会显示一些乱码)


    不过如果我编码设为: latin-3,行尾:Windows (CR LF) ,则仍然提示有error C2001: 常量中有换行符 错误。

    现在不清楚这个保存文件时设置的行尾是什么意思,也是要修改文件的吗?

    2009年10月23日 3:12
  • 你好!
         你的字符串常量不能分开几行写,如果要一行写不下,可以用"+"来连接字符串!
    周雪峰
    • 已标记为答案 YiChun Chen 2009年10月27日 7:54
    2009年10月23日 4:54
    版主
  • 这段代码屏蔽掉就可以,没有用处,仅仅是测试西文的。


    best
    2011年8月26日 3:23