您現在的位置: 365建站網 > 365學習 > Visual Studio error C2001:常量中有換行符錯誤解決辦法

Visual Studio error C2001:常量中有換行符錯誤解決辦法

文章來源:365jz.com     點擊數:1980    更新時間:2017-12-05 08:33   參與評論

 在Visual Studio自動生成的項目中,碰見了一件關于文件編碼的問題,集中在類似于以下的語句上:

DASLog (DASProtWarn, L"(%s)消息超時,進入慢循環召喚模式。", GetHierarchyName());

  編譯時會出現以下錯誤:

error C2001:常量中有換行符

      該錯誤的原因很顯然是文件編碼的問題,在網上搜索了一下,找到了如下解決辦法:

(1)全部用英文編碼,不要用中文

(2)偶數中文 或 結尾加英文的符號,如"."

(3)將文件編碼進行一個手動(如記事本)轉換,改成UTF-8格式

      我采用了第二種方式,直接將末尾的中文“。”改成了英文的“.”,該錯誤就解決了!

有個叫wva的人遇到過類似問題,他向微軟提交了此bug
http://connect.microsoft.com/VisualStudio/feedback/details/341454/compile-error-with-source-file-containing-utf8-strings-in-cjk-system-locale
根據Visual C++ Compiler Team員工的解釋:
The compiler when faced with a source file that does not have a BOM the compiler reads ahead a certain distance into the file to see if it can detect any Unicode characters - it specifically looks for UTF-16 and UTF-16BE - if it doesn't find either then it assumes that it has MBCS. I suspect that in this case that in this case it falls back to MBCS and this is what is causing the problem.
看見了吧,對于那些沒有BOM的文件設計就是這樣的。從語氣上看,他們編譯器小組也不打算修改設計。所以呢,在VC上使用“無簽名的UTF-8”編碼的文件,你就是在抱著一顆不定時炸彈玩耍。因為你永遠都不敢確定哪些詞能通過編譯,哪些不能!


如果要硬編碼字符串,即便是字符編碼轉換也不一定能幫不上你。一旦你為此增加了字符編碼轉換的代碼,那么也意味著可移植性降低了。因為這從根本上是編譯器決定的。

Qt編碼指定
Qt需要在main()函數指定使用的字符編碼:

#include <QTextCodec>

QTextCodec *codec = QTextCodec::codecForName("GBK");//情況1

QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);

QTextCodec *codec = QTextCodec::codecForName("UTF-8");//情況2
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);

 

這里只列舉大家最常用的3個編譯器(微軟VS的中的cl,Mingw中的g++,Linux下的g++),源代碼分別采用GBK和無BOM的UTF-8以及有BOM的UTF-8這3種編碼進行保存,發生的現象如下表所示。

  • 源代碼的編碼

    編譯器

    顯示正常

    顯示亂碼

    GBK

    win vs cl

    情況1

    情況2

    win mingw-g++

    情況1

    情況2

    linux g++

    情況1

    情況2

    UTF-8(無BOM)

    win vs cl

    編譯失敗

    error C2001: 常量中有換行符

    編譯失敗
    error C2001: 常量中有換行符

    win mingw-g++

    情況2

    情況1

    linux g++

    情況2

    情況1

    UTF-8(有BOM)

    win vs cl

    情況1

    情況2

    win mingw-g++

    情況2

    情況1

    linux g++

    情況2

    情況1
     


如對本文有疑問,請提交到交流論壇,廣大熱心網友會為你解答??! 點擊進入論壇


發表評論 (1980人查看,0條評論)
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
用戶名: 驗證碼: 點擊我更換圖片
最新評論
------分隔線----------------------------
自拍偷拍福力视频,偷拍国际精品,麻豆一区福利电影,国产网红视频午夜福利,se视频大全,久久国产AV影院 成年黄页网站大全免费无码| 欧美zooz人禽交| 一本大道道香蕉a| 欧美同性videos可播放| 国内久久这里只有精品| 嫩草视频在线观看免费播放| 日本动漫爆乳h动漫无遮挡| 97在线无码免费人妻短视频| 欧美日韩国产成a片免费网站| 老司机午夜免费精品视频| a毛片免费全部播放无码| 男人天堂在线| 啊宝贝你的奶真大书包| 免费人成在线视频观看| 欧美激情国产精品视频一区| 孕妇被弄到高潮的视频| 国产乱理伦片在线观看夜| chineseboy帅男17v| 黑人与人妻无码中字视频| 女人床上活好是啥样的| 九九厕所偷拍精品视频| 相亲对象是强硬问题儿学生| 小东西下面敏感成这样好大| 欧美日韩精品一区二区视频| 国产精品亚洲综合网| 男女性gif抽搐出入| 在学校里很污污的小黄文| 欧洲美女开放牲交视频| 欧美牲交视频免费观看| 国产午夜激无码AV毛片| 100000部免费视频观看| http://www.marylandentertainmentgroup.org