C_and_CPP 板


LINE

※ 引述《allssddaa (屌炸天)》之铭言:
1F:→ uranusjr: 啊我知道是怎麽回事了, 对你的档案是 UTF8 没错但 cl 吃 07/05 15:39
2F:→ uranusjr: 不了, 因为预设的编译模式是 UTF-16 (印象中) 07/05 15:40
3F:→ uranusjr: 在 .pro 档加上 QMAKE_CXXFLAGS += /utf-8 不知道能不能 07/05 15:41
: 喔喔喔解决了耶 : 非常感谢 : 在.pro加那段就可以编译而且没有乱码 : 请问"CL吃不了因为预设是UTF-16"是什麽意思呢? : 加上那一行又是做了什麽改变呢? 发现我讲得七零八落, 不如写一篇完整的 VC++ 编译器 (cl.exe) 看到一个原始码档案时会试着解读它的编码 预设状况下有两种可能: local codepage 和 UTF-16 判别的方法是, cl.exe 会检查档案开头有没有 BOM [1] 如果有就当成 UTF-16, 否则使用 local codepage 解码 你的 local codepage 视作业系统的设定而定 如果你用繁体中文, 那麽通常就是 CP950, 一种相容 Big 5 的编码 这和 UTF-8 在 ASCII 范围内相容 [2], 所以如果只用 ASCII 字元, 程式就能正常编译 但只要用了其它字元就可能出错 (只是可能, 所以很靠北 XD) 那如果你要用非 ASCII 字元, 解法有两个 一是把源码存成 UTF-16——绝大多数状况是个坏主意, 这是另一个议题 另一个就是明确告诉 cl.exe 你要用的编码, 叫它不要猜 /utf-8 是一个 compiler flag, 用来设定源档与执行档的编码格式 [3] 它相当於 /source-charset:utf-8 /execution-charset:utf-8 对 Qt 而言 execution charset 没有意义 (除非你另外用了 Windows API) 所以其实在这里把它换成 /source-charset:utf-8 也行 QMAKE_CXXFLAGS 是一个 qmake directive 它用来告诉 qmake 要把额外参数喂给编译器 如果你去比对加这个参数前後产生出来的 Makefile 就会看到这个 directive 的内容辗转被丢到 cl.exe 的後面当参数 所以这样就可以指定你的源码编码, 解决这个问题 我自己是学乖了, 现在程式码里只放 ASCII 中文通常都用翻译档 [4] 来给 如果真的不得已, 就用 QString::fromUtf8("\xe4\xb8\xad\xe6\x96\x87") 这样 不然 VC++ 神难搞, 用 compiler flag 要跨平台也很麻烦 或者如果你不介意, Qt 搭配 MinGW 用起来会更顺 [1]: https://zh.wikipedia.org/zh-tw/位元组顺序记号 [2]: 其实是和 Western-1 在 0-255 码位相容, 而 UTF-8 是 Western-1 的超集 [3]: https://msdn.microsoft.com/en-us/library/mt708821.aspx [4]: http://doc.qt.io/qt-5/i18n-source-translation.html -- 「我最想要的同伴嘛,首先是要笑口常开,其次是我们能永远不会发生误会。 如果这些都能办到的话,嗯,如果他是世界上第一流的桥手,也还不错。」 -- 班尼多‧加罗素,前义大利蓝队成员 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.94.57
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1499247854.A.CD7.html
4F:推 allssddaa: 太感谢了 讲得很清楚 07/06 08:13







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP