我需要輸出一些可能是utf8多字節的數據,我需要使用setw保持它們的格式。 當字符是多字節序列時,alignement丟失,wset無法正常工作。setw imbue錯誤的輸出
//#include <stdio.h>
#include <locale>
#include <iostream>
//#include <fstream>
#include <iomanip>
//#include <sstream>
int main(int argc, char **argv)
{
std::locale l=std::locale("en_US.utf8");
std::locale::global(l);
std::cout.imbue(l);
std::cout<<std::endl;
std::cout<<std::setw(40)<<std::right<<"hi 「my」 friend"<<std::endl;
std::cout<<std::setw(40)<<std::right<<"hi -my- friend"<<std::endl;
return 0;
}
輸出爲:
hi 「my」 friend
hi -my- friend
我缺少什麼?
我必須指出,字符「和」不正常「,而是兩個人在UTF8由三個字節表示
你一直說'wset',但這不是一個函數,它不是你正在使用的函數--Setw'。 – antiduh
不幸的是,注入UTF-8語言環境不會使格式化函數使用UTF-8。完成任務的最簡單方法是將所有內容轉換爲wchar_t並使用寬字符流。 –