1. 程式人生 > >vs2015:/utf-8選項解決UTF-8 without BOM 原始碼中文輸出亂碼問題

vs2015:/utf-8選項解決UTF-8 without BOM 原始碼中文輸出亂碼問題

本來我已經參考網上關於C++中文輸出亂碼的文章解決了,如下面的程式碼輸出前呼叫wcout.imbue設定locale,就可以正常輸出中文了。

std::wcout.imbue(std::locale(std::locale(), "", LC_CTYPE));
std::wcout << L"江清月近人" << std::endl;

但是同樣的方法換在另一個程式中還是輸出亂碼。反覆查詢原因,最後發現是兩個原始碼的編碼格式不同。雖然都是UTF-8,但是能正確輸出中文的原始碼檔案是帶BOM頭的,另一個是不帶BOM的。參考這個篇文章《MSVC中C++ UTF8中文編碼處理探究》

搞明白了MSVC對於不帶BOM的UTF-8檔案,預設會根據本地locale的設定來決定檔案的編碼(對於簡體中文系統,就是GBK)。所以會對於UTF-8 without BOM的程式碼檔案輸出中文就是亂碼。對於UTF-8 with BOM檔案,會正確將其按照UTF-8來識別。

/utf-8 編譯選項

MSVC對於UTF-8 without BOM格式支援不好,這個問題由來已久,在VS2015之前的版本一直存在。
在VS2015版本(Visual Studio 2015 Update 2),增加一個編譯選項/utf-8,該編譯選項的作用就是將原始碼字符集和執行檔案字符集指定為UTF-8。增加該編譯選項後,再重新編譯執行,程式正確輸出中文,問題解決。

這裡寫圖片描述

這裡寫圖片描述

#pragma execution_character_set(“utf-8”)

其實網上可以找到不少文章提到還有另一個解決辦法, 就是在原始碼中插入預處理指令#pragma execution_character_set("utf-8")

#if defined(_MSC_VER) && (_MSC_VER >= 1900)    
# pragma execution_character_set("utf-8")    
#endif

這是關於該指令的官網說明:《execution_character_set》
根據這個說明,這個指令似乎是VS2015才有的(我的電腦沒有別的版本的MSVC所以沒辦法驗證VS2015之前的版本是否支援這個指令),但是在Visual Studio 2015 Update 2

版本就廢棄了。我的VS2015版本是Visual Studio 2015 Update 3,對這個指令確實無效。

Visual Studio 儲存UTF-8 without BOM

為什麼要用UTF-8 without BOM來儲存原始碼?
主要的原因是linux下編譯器不支援UTF-8 with BOM的原始碼編譯,其實如果你的專案沒有跨平臺編譯的要求,並不一定要將原始碼儲存為UTF-8 without BOM格式。
如果你希望在Visual Studio中將原始碼儲存為UTF-8 without BOM格式,如下設定一下高階儲存選項就可以了。
這裡寫圖片描述

預設是Unicode(UTF-8 帶簽名)-內碼表65001,這裡要修改為Unicode(UTF-8 無簽名)-內碼表65001
這裡寫圖片描述

參考文章

相關推薦

vs2015:/utf-8選項解決UTF-8 without BOM 原始碼中文輸出亂碼問題

本來我已經參考網上關於C++中文輸出亂碼的文章解決了,如下面的程式碼輸出前呼叫wcout.imbue設定locale,就可以正常輸出中文了。 std::wcout.imbue(std::locale(std::locale(), "", LC_CTYPE)

Jenkins控制臺中文輸出亂碼解決方法

http 在服務器 管理 中文 服務器環境 電腦 image tomcat pps 1、 設置jenkins所在服務器環境變量,右鍵我的電腦→屬性→高級系統設置→環境變量,添加JAVA_TOOL_OPTIONS 2、修改Tomcat配置,進入apache_tomcat

javaweb專案中解決url中傳過來的中文亂碼

從jsp頁面中傳遞到servlet中的值經常出現亂碼問題 問題描述 1:jsp頁面設定了編碼格式為utf-8 2:servlet頁面也設定了utf-8 3:工作空間也設定了utf-8 4:但是從jsp頁面傳遞到servlet頁面的值還是出現中文亂碼 ps:傳遞的值

python程式設計中中文輸出亂碼UnicodeEncodeError: 'ascii' codec can't encode character解決方案

問題是這樣的 我用的jupyter,下圖是我的原始碼我知道由於未把ASCII轉為utf8,但是我按照網上的程式碼修改後直接沒有output了 我加上 import sys reload(sys) sys.setdefaultencoding('utf-8')

php 解決 escape 編碼後 js 解碼中午輸出亂碼的問題

我們通過 php  進行 escape  編碼 加密我們的文字後  通過js 的unescape 進行解碼,然而 中文出現亂碼,主要是因為 現在網路上所在流傳的 PHP escape  編碼方法存在 一些問題 ,下面的方法是我個人修改後的 ,提供

解決Navicat 執行.sql檔案時中文出現亂碼 不能顯示中文

本人第一使用navicat時,直接執行.sql時,中文出現了亂碼,如圖所示:後來通過查資料才明白,是因為自己執行.sql檔案步驟有問題,沒有設定編碼格式,所以下面介紹正確的編碼步驟:第一步:想執行.sql檔案,必須選中資料庫才行,因為.sql執行後生成的表是存在於指定資料庫內

【IDEA工具設定】解決控制檯中文輸出亂碼問題

---------------------------------------------------------------------------------親測有效,完美的解決了我的問題。之前遇到兩種錯誤。一、控制檯沒有亂碼,但編輯區的中文無法識別是什麼編碼,也是醉了。

Java控制檯中輸入中文輸出亂碼解決辦法

在學習Java IO的輸入輸出流的時候遇到了一個問題,就是無論用BufferedReader還是Scanner輸入中文,在控制檯輸出的時候都會出現亂碼的情況,而且不管在Window-Preferences中怎麼改變編碼方式都無效(包括UTF-8和GBK)。 import

解決 Javascript 中 atob 方法解碼中文字元亂碼問題

function utf8_to_b64(str) { return window.btoa(unescape(enco

解決UTF-8方法歸納

char ren logs ping utf log Coding ron web 1:通過spring配置過濾器解決 <!-- 配置Spring提供的字符編碼過濾器 --> <filter> <filte

TensorFlow學習筆記(UTF-8 問題解決 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte)

show 學習 github red star ims fas can pri 我使用VS2013 Python3.5 TensorFlow 1.3 的開發環境 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte

解決EditPlus在設置了UTF-8之後,編寫的HTML頁面仍出現漢字亂碼問題

content size 方式 解釋 RM char .net 一行 好的 解決EditPlus在設置了UTF-8之後。編寫的HTML頁面仍出現漢字亂碼問題 ? 相

關於Encode in UTF-8 without BOM

什麽 nic 代碼 網頁代碼 使用 python 文件頭部 環境 解釋 定義BOM(Byte Order Mark),字節順序標記,出現在文本文件頭部,Unicode編碼標準中用於標識文件是采用哪種格式的編碼。它的編碼是FEFF。 說明 在 UTF-8 文件中放置 BOM

UTF-8 without BOM

UTF-8編碼的檔案可以分為without BOM和BOM兩種格式。 何謂BOM? "EF BB BF" 這三個位元組就叫BOM,BOM的全稱叫做"Byte Order Mark". 在UTF-8檔案中常用BOM來表明這個檔案是UTF-8檔案, 而BOM的本意是在UTF-16中用來表示高低位元組序列

UTF-8UTF-8 without BOM

UTF-8編碼的檔案可以分為without BOM和BOM兩種格式。 何謂BOM? “EF BB BF” 這三個位元組就叫BOM,BOM的全稱叫做"Byte Order Mark". 在UTF-8檔案中常用BOM來表明這個檔案是UTF-8檔案, 而BOM的本意是

mysql資料庫插入中文以及亂碼問題解決(統一設定為utf-8)格式

1、編輯MySql的配置檔案 MySql的配置檔案Windows下一般在系統目錄下或者在MySql的安裝目錄下名字叫my.ini。像我的就在D:\Program Files (x86)\MySQL\M

idea軟體編碼已經設定好了為utf-8,但是svn中down下來的檔案格式本身不是utf-8的,此時開啟後會出現中文亂碼解決方法

我是個idea的忠實使用者,新公司的專案都是用eclipse做的,通過svn拉下程式碼後發現,註釋的內容裡,中文內容都是亂碼。問過專案負責人,說可能是GBK編碼。 但是,我通過idea的setting設定了編碼,試了5種編碼都沒用,中文內容還是亂碼。最後還是自己試出來解決方案。 詳細的原因請參考

Httprunner 安裝pipenv insatll --dev出現ValueError: unknown locale: UTF-8解決方案

1、開啟terminal(終端)2、cd ~ ( 進入當前使用者的home目錄)3、open .bash_profile (開啟.bash_profile檔案,如果檔案不存在就  建立檔案:touch .bash_profile  編輯檔案:open -e bash_prof

Python學習筆記:Convert UTF-8 with BOM to UTF-8 without BOM in Python

前言 windows對於utf-8編碼的檔案自帶BOM,但是其他系統utf-8編碼預設不帶BOM。 這就造成在某些情況下字元解碼會出現問題,比如python自帶的json在讀取在window下編碼得來的utf-8檔案時,會報如下錯誤: V

ubuntu 14.04 輸入過程中出現[Invalid UTF-8] 的解決

    最近電腦太慢,於是弄了固態硬碟。然後開始安裝系統,正好一直想用14.04的系統。不過裝新的系統總是有讓人頭疼的地方,各種環境,配置都得從頭再來。     一開始就碰到一個頭疼的問題就是輸入法。首先是不知道怎麼新增中文。鼓搗了半天。記錄一下,免得以後忘記了。