C++ 利用標準庫多字節轉寬字節字符

在 C/C++ 之中,通常建議使用:mbstowcs (C語言函數庫)來實現多字節字符轉寬字節字符,這是因為如果使用。

?std::wstring_convert<std::codecvt_utf8<wchar_t>> 模板來實現,它可能導致程序崩潰的風險,如果字符集不是 utf8、或 unicode 字符時。

舉個例子:一些特殊的中文字符,可能沒法編譯為 unicode 字符,那么就會導致發生異常,而且必須是 utf8 編碼。

C/C++ 程序之中要使用中文,必須把編譯的執行字符集,通過編譯器指令更改為 utf8,否則就可能產生SEH結構化異常崩潰程序。
?

mbsmbstowcs、wcstombs 函數:

可通過:setlocale 設置地區函數影響

例如:

1、setlocale(LC_ALL, "zh-CN.UTF-8");

2、setenv("LANG","en_US.utf8",1);

C 庫函數 – setlocale() | 菜鳥教程 (runoob.com)

mbsmbstowcs、wcstombs 函數例子:

std::wstring Encoding::ascii_to_wstring2(const std::string& s) noexcept {std::size_t len = mbstowcs(NULL, s.data(), 0);if (len == 0 || len == std::string::npos) {return std::wstring();}ppp::vector<wchar_t> buf(len + 1);return std::wstring(buf.data(), mbstowcs(&buf[0], s.data(), buf.size()));}std::string Encoding::wstring_to_ascii(const std::wstring& s) noexcept {std::size_t len = wcstombs(NULL, s.data(), 0);if (len == 0 || len == std::string::npos) {return std::string();}ppp::vector<char> buf(len + 1);return std::string(buf.data(), wcstombs(&buf[0], s.data(), buf.size()));}

std::wstring_convert<std::codecvt_utf8<wchar_t>> 例子:

        std::wstring Encoding::utf8_to_wstring(const std::string& s) noexcept {std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;try {return converter.from_bytes(s);}catch (const std::exception&) {return ascii_to_wstring2(s);}}std::string Encoding::wstring_to_utf8(const std::wstring& s) noexcept {std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;try {return converter.to_bytes(s);}catch (const std::exception&) {return wstring_to_ascii(s);}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12983.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12983.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12983.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【利用數組處理批量數據-譚浩強配套】(適合專升本、考研)

無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 完整資料如下&#xff1a;純干貨、純干貨、純干貨&#xff01;&#xff01;…

點云成圖原理

點成圖&#xff08;Point Cloud&#xff09;是指由一組離散的點構成的圖形&#xff0c;它們在空間中沒有任何連接關系。點成圖通常是由激光雷達、相機或其他傳感器獲取的三維數據&#xff0c;用于表示現實世界中的物體或場景。 三角成圖&#xff08;Triangulation&#xff09;…

element ui Tree樹形控件

lazy 是否懶加載子節點&#xff0c;需與 load 方法結合使用 boolean 默認為falseload 加載子樹數據的方法&#xff0c;僅當 lazy 屬性為true 時生效 function(node, resolve)使用懶加載load不需要再使用data&#xff0c;利用resolve返回值即可注意&#xff1a;第一層的數據要寫…

PMR-440N7Q韓國施耐德三和相序繼電器EOCR-PMR

韓國施耐德三和EOCR繼電器PMR-440N7Q PMR-440-N 直流電動機保護器:DCL、DOCR-S/H 欠電流繼電器:EUCR-3C 交流電壓繼電器:EOVR、EVR-PD、EVR-FD、EUVR 韓國三和EOCR電動機保護器:EOCR-SS、EOCR-SS1/SS2、EOCR-AR、EOCR-ST、EOCR-SP、EOCR-SP1/SP2、EOCR-SE、EOCR-SE2/SE PMR-44…

GIT基礎02 多機器協作等命令

前言 首先我們知道git給我們提供了分支管理的功能 我們一般使用master分支作為線上環境,master分支一般是一個穩定的分支 我們通常是會創建一個其他分支進行開發,這樣不會影響線上的機器運行 如果沒有git提供這樣的分支功能,就無法做到這一套了 指令學習 假設軟件出現問題咋辦…

LBSS138LT1G 絲印J1 SOT-23 N溝道 50V/200mA 貼片MOSFET

LBSS138LT1G的應用領域廣泛&#xff0c;主要因為它是一種N溝道金屬氧化物半導體場效應晶體管&#xff08;MOSFET&#xff09;&#xff0c;具有低電荷、快速開關速度和高阻斷特性。以下是一些典型的應用領域&#xff1a; 1. 消費電子產品&#xff1a;LBSS138LT1G常用于電視、音響…

debian apt 更改阿里源

1. 備份文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2. 更改 sources.list文件內容為&#xff1a; deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb htt…

QT狀態機1-三態循環狀態機

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【C -> Cpp】由C邁向Cpp (6):靜態、友元和內部類

標題&#xff1a;【C -&#xff1e; Cpp】由C邁向Cpp &#xff08;6&#xff09;&#xff1a;靜態、友元和內部類 水墨不寫bug &#xff08;圖片來源于網絡&#xff09; 目錄 &#xff08;一&#xff09;靜態成員 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

生產性服務業與生活性服務業如何區分

服務業的興旺發達是現代經濟的顯著特征&#xff0c;是經濟社會發展的必然趨勢&#xff0c;是衡量經濟發展現代化、國際化、高端化的重要標志。生產性服務業和生活性服務業是服務業的重要組成部分&#xff0c;是當前中國經濟最具活力的產業&#xff0c;也是未來經濟發展最具潛力…

2024OD機試卷-解密犯罪時間 (java\python\c++)

題目:解密犯罪時間 題目描述 警察在偵破一個案件時,得到了線人給出的可能犯罪時間,形如 “HH:MM” 表示的時刻。 根據警察和線人的約定,為了隱蔽,該時間是修改過的,解密規則為:利用當前出現過的數字,構造下一個距離 當前時間 最近的時刻,則該時間為可能的犯罪時間。…

為pytorch前向和反向的Tensor生成描述性統計

為pytorch前向和反向的Tensor生成描述性統計 代碼 在調試Megatron-DeepSpeed的精度時&#xff0c;我們希望對比每一層前向和反向傳播的輸入輸出誤差。然而&#xff0c;由于數據量過大&#xff0c;直接保存所有數據不太現實。因此&#xff0c;我們生成了輸入輸出tensor的描述性統…

有哪些好用的3dMax大神插件?

有哪些好用的3dMax大神插件&#xff1f; Mesh Insert 3DMAX網格插入插件Mesh Insert&#xff0c;在選擇的面上安門窗、打螺絲、挖洞、插入眼耳口鼻及其它網格模型等可以分分鐘搞定&#xff01;它通過將面選擇替換為庫中的資源來加快建模過程。非常適合硬網格和有機建模&#xf…

Go 一個類型轉換工具包strconv包

Go 語言的 strconv 包提供了用于基本數據類型之間轉換的函數&#xff0c;包括字符串到其他基本類型的轉換&#xff0c;以及其他基本類型到字符串的轉換。 字符串轉換為基本數據類型 strconv.Atoi&#xff1a;將字符串轉換為 intstrconv.ParseBool&#xff1a;將字符串轉換為 b…

iOS ------ 多線程基礎

一&#xff0c;進程和線程 1&#xff0c;進程 定義&#xff1a; 進程是指在系統中正在運行的一個應用程序每個進程之間是獨立的&#xff0c;每個進程均運行在其專有的且受保護的內存進程是系統進行資源分配和調度的一個獨立單位 補充&#xff1a;iOS系統是相對封閉的系統&a…

SQL中的LAG函數與LEAD函數用法

LAG&#xff1a;函數用于獲取結果集中當前行之前的某一行的值 LAG (scalar_expression [,offset] [,default]) OVER ([partition_by_clause ] order_by_clause ) -----漢字解釋 LAG (字段 [,偏移量默認為1] [,如果沒有值時候默認值]) OVER ( [ partition_by 字段 ] order_by 字…

服務網格 SolarMesh v1.13 重磅發布

SolarMesh是行云創新推出的流量治理平臺&#xff0c;它基于Istio&#xff0c;為部署在K8s集群上的應用提供全面的流量治理能力。 在之前的版本中&#xff0c;SolarMesh提供的能力有&#xff1a;流量視圖&#xff0c;流量控制策略批量配置&#xff0c;API級別的流量數據采集和展…

【上海大學計算機組成原理實驗報告】五、機器語言程序實驗

一、實驗目的 理解計算機執行程序的實際過程。 學習編制機器語言簡單程序的方法。 二、實驗原理 根據實驗指導書的相關內容&#xff0c;指令的形式化表示是指采用一種規范化的符號系統&#xff0c;以更清晰、精確地描述和表示指令的邏輯功能和操作步驟。 匯編是一種編程語言…

MM模塊學習二 (供應商,物料后臺相關配置)

公司代碼配置 新建條目&#xff08;只是建了一個名字出來&#xff0c;后面很多表都是沒有得&#xff09; 接下來定義公司代碼&#xff1a; 公司代碼復制完成&#xff08;后續修改交給財務顧問去做&#xff09; 復制工廠&#xff1a; 復制工廠完成&#xff1a; 修改復制過去的工…

Linux服務器lvm磁盤管理fdisk和df磁盤大小不同修改

服務器端由于硬盤是通過VCenter原來100G磁盤復制的虛擬機,復制完成后,原來100G的磁盤通過選擇 磁盤重新復制出150G的磁盤,開機后發現還是原來的100G的磁盤,通過fdisk -l 查看有個sdb是150G, 但是已經劃轉的lvm盤只有100G, 通過df查看也是原來的100G: pvs查看pv里也是10…