[問題] UTF-8 to ANSI

看板C_and_CPP (C/C++)作者 (Unknow)時間10年前 (2015/06/23 00:24), 編輯推噓1(1012)
留言13則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC10, Windows 7 問題(Question): 我用C++讀取網頁的內容存成txt檔後要做文字分析, 但內容有中文字,要做一些文字比對(用C++的fstream存檔後是UTF-8格式)。 爬了很多 wchar_t 之類的用法,發現都太麻煩了... 後來我發現一件有趣的事,同樣的內容另存成ANSI的格式下, char可以正常運作,顯示中文、比對中文都沒問題, 因此就想說是不是我存成UTF-8後, 可以用什麼方法靠程式把他轉為ANSI格式存檔後,在開啟來讀取 ? 請各位大大教我這個菜逼巴,怎麼把UTF-8轉為ANSI格式,感恩。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.48.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434990287.A.2CA.html

06/23 00:44, , 1F
在網路找到轉換的方法,以解決
06/23 00:44, 1F

06/23 11:50, , 2F
如果是自己使用還好,若是在別人未使用中文OS系統上就GG了
06/23 11:50, 2F

06/23 12:09, , 3F
utf8怎麼轉ANSI @@? 你是想把UTF-8的標點轉ANSI嗎
06/23 12:09, 3F

06/23 12:12, , 4F
如果你只是要skip掉UTF-8的字的話 你只要碰到byte的第
06/23 12:12, 4F

06/23 12:12, , 5F
一個bit是1的 就看裡面幾個bit是1 跳掉後面幾個byte即
06/23 12:12, 5F

06/23 12:13, , 6F
可 比方說看到1110xxxx 就知道要跳掉自己跟後面兩個byt
06/23 12:13, 6F

06/23 12:13, , 7F
e,應該是不用注意endian問題啦....
06/23 12:13, 7F

06/23 12:14, , 8F
或者單純看到byte第一個bit是1就跳掉也是可以的
06/23 12:14, 8F

06/23 12:15, , 9F
if(0x10000000 & targetChar) skipToNext();
06/23 12:15, 9F

06/23 13:29, , 10F
他的"ANSI"應該是本地編碼 (就那個記事本的選項)
06/23 13:29, 10F

06/23 13:30, , 11F
這樣的話 Windows 直接叫 WinAPI 比較直接
06/23 13:30, 11F

06/23 13:30, , 12F
先用 MultiByteToWideChar 轉成 wchar_t[] (UTF-16) 後
06/23 13:30, 12F

06/23 13:31, , 13F
再 WideCharToMultiByte 轉成本地編碼即可
06/23 13:31, 13F
文章代碼(AID): #1LY3RFBA (C_and_CPP)
文章代碼(AID): #1LY3RFBA (C_and_CPP)