将Unicode字符写入OStream

时间:2010-07-19 14:47:38

标签: c++ unicode wchar-t ostream

我正在使用unicode / wide字符,我正在尝试创建一个toString方法(Java ::toString equiv)。 ostream是否会处理宽字符,如果有的话,是否有办法警告流的消费者它是unicode出来的呢?

2 个答案:

答案 0 :(得分:3)

ostream和其他C ++都不了解Unicode。通常用C ++编写字符串转换如下:

template<typename Char, typename Traits>
std::basic_ostream<Char, Traits>&
operator<<(std::basic_ostream<Char, Traits>& stream, const YourType& object) {
    return stream << object.a << object.b;  // or whatever
}

是否得到类似Unicode的东西取决于实现。 C ++中的流从不是Java意义上的文本流,而C ++的字符串不是Java意义上的字符串。如果您想要一个真正的Unicode字符串,您可能需要查看ICU library

答案 1 :(得分:0)

宽字符串不可移植,最好在C ++中避免。根据平台的不同,它们可以是UTF-16,UTF-32甚至是非Unicode。

C ++中的常见方法是在内部使用UTF-8编码的多字节with open(processing_log, 'ab') as f_out: process = subprocess.Popen( ['python', PATH_TO_PYTHON_SCRIPT, PATH_TO_CONFIG_FILE], stdout=f_out, stderr=subprocess.STDOUT, stdin=subprocess.PIPE) 字符串,并在必要时在系统边界进行转码。大多数现代系统(例如Linux和macOS)均可与UTF-8配合使用,因此可以将它们传递到输出流。由于遗留代码页,Windows是最成问题的。您可以将Boost Nowidethe {fmt} library用于便携式UTF-8输出。

免责声明:我是{fmt}的作者。