相关疑难解决方法(0)

在Windows控制台应用程序中输出unicode字符串

嗨,我试图将unicode字符串输出到带有iostreams的控制台并失败.

我发现了这一点: 在c ++控制台应用程序中使用unicode字体 ,这个代码片段有效.

SetConsoleOutputCP(CP_UTF8);
wchar_t s[] = L"èéøÞ????æ?a";
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
char* m = new char[bufferSize]; 
WideCharToMultiByte(CP_UTF8, 0, s, -1, m, bufferSize, NULL, NULL);
wprintf(L"%S", m);
Run Code Online (Sandbox Code Playgroud)

但是,我没有找到任何方法来使用iostream正确输出unicode.有什么建议?

这不起作用:

SetConsoleOutputCP(CP_UTF8);
utf8_locale = locale(old_locale,new boost::program_options::detail::utf8_codecvt_facet());
wcout.imbue(utf8_locale);
wcout << L"¡Hola!" << endl;
Run Code Online (Sandbox Code Playgroud)

编辑 我找不到任何其他解决方案,而不是在流中包装此片段.希望,有人有更好的想法.

//Unicode output for a Windows console 
ostream &operator-(ostream &stream, const wchar_t *s) 
{ 
    int bufSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
    char *buf = …
Run Code Online (Sandbox Code Playgroud)

c++ unicode iostream windows-console

68
推荐指数
4
解决办法
6万
查看次数

如何从Windows上的c ++控制台应用程序打印UTF-8

对于在英语Windows(XP,Vista或7)上使用Visual Studio 2008编译的C++控制台应用程序.是否可以打印到控制台并使用cout或wcout正确显示UTF-8编码的日语?

c++ utf-8 console-application

19
推荐指数
4
解决办法
3万
查看次数

对C++的std :: wstring,UTF-16,UTF-8以及在Windows GUI中显示字符串感到困惑

我正在为Windows开发一个仅限英语的C++程序,我们被告知"总是使用std :: wstring",但似乎团队中的任何人都没有太多理解.

我已经阅读了标题为"std :: wstring VS std :: string.的问题.这非常有用,但我仍然不太明白如何将所有这些信息应用到我的问题中.

我正在处理的程序在Windows GUI中显示数据.该数据以XML格式保存.我们经常使用XSLT将XML转换为HTML或XSL:FO以用于报告目的.

根据我所读到的内容,我的感觉是HTML应编码为UTF-8.我对GUI开发知之甚少,但我读到的一点点表明GUI内容都是基于UTF-16编码的字符串.

我想知道这会让我离开的地方.假设我们认为所有持久化数据都应该是UTF-8编码的XML.这是否意味着为了在UI组件中显示持久化数据,我应该真正执行某种明确的UTF-8到UTF-16转码过程吗?

我怀疑我的解释可以使用澄清,所以如果你有任何问题,我会尝试提供.

c++ unicode utf-8 utf-16 wstring

17
推荐指数
3
解决办法
2万
查看次数

如何在Linux上用std :: ifstream读取文件中的非ASCII行?

我试图读取纯文本文件.在我的情况下,我需要读取每行的行,并处理该信息.我知道C++有阅读wchars的功能.我尝试了以下方法:

#include <fstream>
#include <iostream>

int main() {
    std::wfstream file("file");       // aaaàaaa
    std::wstring str;
    std::getline(file, str);
    std::wcout << str << std::endl;   // aaa
}
Run Code Online (Sandbox Code Playgroud)

但正如你所看到的,它没有读完整行.读取"à"时会停止,这是非ASCII.我该如何解决?

c++ linux

9
推荐指数
1
解决办法
2710
查看次数

使用wstring获取行读取文件

我有一个包含文本的文件,我想从这个文件中的每一行变成一个std::wstring变量.如果我这样做我得到一个错误,那么是否可以使用std::wstring或者我必须使用std::string?这是我的代码:

std::ifstream fichier( "text.txt" );

if ( fichier )
{
  std::wstring ligne;

  while ( std::getline( fichier, ligne ) )
  {
      //work with ligne
  }
}
Run Code Online (Sandbox Code Playgroud)

如前所述,如果我取代std::wstringstd::string我有没有错误.

c++ string ifstream wstring

9
推荐指数
1
解决办法
1万
查看次数

C++11:std::locale::empty() 是一件事吗?

尝试从 StackOverflow 编译一些代码,基本上是这些行:

std::wifstream wif(filename);
wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会版本:gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0

我收到编译错误:

“空”不是“std::locale”的成员

我同意编译器的观点,并检查了cppreference等文档- 没有关于此类事情的信息。头文件也没有显示任何内容。

我想知道,这只是我的问题还是另一个主题的示例代码......

它可以是 MSVC 功能吗?(我使用的示例代码来自与Windows相关的问题)

c++ locale c++11

6
推荐指数
1
解决办法
3152
查看次数