我需要输出一些可能是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并使用宽字符流。 –