下面的程序在Visual Studio 2008编译Windows下下,都与字符集 “使用Unicode字符集”和“使用多字节字符集”。但是,它不能在Ubuntu 10.04.2 LTS 64位和GCC 4.4.3下编译。我在两种环境下都使用Boost 1.46.1。的boost ::文件系统和Unicode Linux和Windows
#include <boost/filesystem/path.hpp>
#include <iostream>
int main() {
boost::filesystem::path p(L"/test/test2");
std::wcout << p.native() << std::endl;
return 0;
}
Linux下的编译错误是:
TEST.CPP:6:错误:不对应的在“的std :: '运算符< <' wcout < < p.boost :: filesystem3 ::路径::本地()”
它看起来对我来说,升压:: Linux下的文件系统不提供路径)宽字符的字符串::本地(尽管已用初始化的boost ::文件系统::路径宽字符串。此外,我猜测这是因为Linux默认为UTF-8,Windows默认为UTF-16。
所以我的第一个问题是,我怎么写这两个平台上使用的boost ::文件系统,并支持Unicode路径的程序?
第二个问题:当我在Windows下运行此程序,它输出:
/test/test2
我的理解是,本地()方法应该将路径转换到Windows下的原生格式,这是使用反斜杠代替正斜杠。为什么字符串以POSIX格式出现?
谢谢您的回答。再看看这一点,看起来使用cout而不是宽字符是Linux中的一种方式,因为在那里所有的东西都是UTF-8。但在Windows控制台中,使用wcout虽然会编译,但不能正确显示Unicode字符。为了实现这一目标,显然有几个环节必须跳过。 – 2011-03-17 05:40:31
Windows控制台能够以UTF-16格式显示Unicode,但其默认字体不可用,必须将控制台设置更改为Unicode字体。同样根据我的经验,即使您通过UTF-16并且输出为UTF-16,通过Windows的C I/O函数的所有路由也会愚蠢地通过非Unicode的8位编码瓶颈!您可能能够做一些设置并传递一些参数以避免它......但调用“宽”Windows控制台输出API要容易得多。 – hippietrail 2012-08-13 08:31:52