2023年5月4日 星期四

[C++]讀取CSV檔案可能遇到的編碼問題

讀取CSV檔案可能遇到的小問題

由於我們的產品可以事先編寫指令腳本,

讓產品直接載入腳本進行動作,

因此我規畫了該腳本的格式,並選用.csv檔案作為腳本檔案格式。

但在實際撰寫程式之前,我先撰寫了csv檔案的讀取與寫入程式,

先驗證我能夠正確操作該檔案的讀取與寫入。


第一步先透過右鍵建立檔案。

修改檔名(依序由左至右),並直接修改副檔名為csv (強制變更)。


 

打開檔案會遇到此視窗,

一樣持續執行,填入內容。



透過以下程式碼進行讀取

並列印出來。

得到結果:

得到了一堆亂碼。

這時我想到,應該是儲存檔案格式的問題,直接修改副檔名肯定是高風險的,

因為檔案本身的格式會和副檔名對不起來,因此應該走正式的存檔方式。

我打開該csv檔案,重新另存新檔,選擇 *.csv格式。


這時候重新開啟這個檔案,就不會出現警告了。

此時再一次透過C++讀取CSV資料,

結果如下:

可以發現Martin的M不見了,變成奇怪的文字,

後來搜尋一下原因,原來是檔案編碼的不同,會造成文字的亂碼。

原來是剛剛選擇另存新檔時,選擇的csv檔案格式是以UTF-8進行編碼,

應該要選擇另一個csv檔案格式才不會造成亂碼,另一個編碼應該是ANSI或Unicode格式,

因為c++只能讀取這兩種格式。

如下圖紅圈處:


專案中的屬性可以設定此專案要使用哪一種編碼:

使用多位元組字元集是給ANSI使用的,

但我兩者都測試過,輸出結果都會是正確的,

因此目前我還不知道excel存出來的csv檔案是屬於哪一種編碼。

讀取結果:



參考資料:

https://www.jb51.net/article/229211.htm

https://husking-studio.com/cpp-txt-file-01/


沒有留言:

張貼留言

社會新鮮人如何投資?

我的觀點是,在 沒有很多 本錢 的情況下, 別寄望每個月幾千元放到股票或者最近很夯的高股息ETF就能讓你致富, 先投資自己,讓自己的本業收入提高吧。