C++ C++;在整个程序中设置区域设置

C++ C++;在整个程序中设置区域设置,c++,locale,global,C++,Locale,Global,如果可能的话,我正在寻找一种在整个程序中设置语言环境的方法 我在主函数中设置区域设置如下: int main() { setlocale(LC_ALL, ""); .... return 0; } 但是,它并没有在整个程序中设置我的不同类/方法的区域设置。我宁愿不写在每一个打印在屏幕上的方法之上,并且创建一个C++区域对象并传递它,这是不能完全接受的。 谢谢你的时间。< /P> < P>修改全局区域设置的两个函数是,并且所有未来的C和C++ I/O和字符串操作都会使用它

如果可能的话,我正在寻找一种在整个程序中设置语言环境的方法

我在主函数中设置区域设置如下:

int main()
{
    setlocale(LC_ALL, "");
    ....
    return 0;
}

但是,它并没有在整个程序中设置我的不同类/方法的区域设置。我宁愿不写在每一个打印在屏幕上的方法之上,并且创建一个C++区域对象并传递它,这是不能完全接受的。


谢谢你的时间。< /P> < P>修改全局区域设置的两个函数是,并且所有未来的C和C++ I/O和字符串操作都会使用它们,除了六个标准I/O C++流,它们是在代码运行之前构建的,所以如果需要的话,你可能必须单独地将它们灌输:

#include <locale>
#include <clocale>
int main()
{
   std::setlocale(LC_ALL, ""); // for C and C++ where synced with stdio
   std::locale::global(std::locale("")); // for C++
   std::cout.imbue(std::locale());
   // cerr, clog, wcout, wcerr, wclog as needed
#包括
#包括
int main()
{
STD::StalLaLaLL(LCyALL,“”);//用于C和C++的STDIO同步
STD::LoaLe::Global(STD::LoaLead(”));C++
std::cout.imbue(std::locale());
//cerr、堵塞、wcout、wcerr、wclog(根据需要)
用于设置区域设置,但其范围由我们传递的第一个参数(即标志)决定。在您的例子中,“LC_ALL”

设置区域设置有两种方法。因此,根据setlocale的行为,如果您将第二个参数传递为“”或NULL,它将采用系统环境(
LANG
)中的默认值。参考代码如下:

setenv("LANG","en_US.utf8",1);
cout << "GET ENV .... " << getenv("LANG");
setlocale(LC_ALL,"");
setlocale(LC_ALL,"en_US.utf8");

setlocale
对于它应该影响的东西来说已经是全局性的了。那些其他方法使用的是什么东西呢?我记得,
setlocale
会影响较旧的“类C”"API,但不接触像 Cuth和C++流之类的东西。我有一个类,它从一个文件中读取并显示它的一些内容。它会浪费我的垃圾,因为一些字母有重音。StestLaLead设置在主体中,但似乎不影响第二类。这不足以排除很多可能性。你可能是U。使用setlocale不影响的内容,例如std::fstream。或者问题可能与cout和控制台有关。或者您的文件数据可能采用了无法按预期方式转换的编码。等等。在这一点上,我认为您应该编辑此问题,或者发布一个新问题,涵盖您遇到的实际问题,并将代码发布到f你是如何读取文件并通过cout发送数据的。@Nikos在理论上,但在我的经验中不是这样