在Linux中获取环境变量为UTF-8字符串

时间:2012-07-25 14:27:40

标签: c++ linux unicode environment-variables

我正在尝试将应用程序从Windows移植到Linux。 在Windows中,我在windows.h中有一个GetEnvironmentStrings()函数,它以NAME = VALUE的形式为我提供当前进程中的环境变量及其值。 对于Linux,我使用像这样的环境变量

for (char **en=environ; *en; en++)   {
    std::string str(*en)
    env.push_back(str);      //env is a vector of strings
}

仍然应用程序似乎不起作用。在Windows中,当我打印传递给env向量(字符串向量)的字符串大小时,它将所有字符串的大小打印为48个字节。    而在Linux上,大小为8.原始应用程序使用Unicode版本(GetEnvironmentStringsW)和    使用转换函数WideCharToMultiByte将返回的宽字符串转换为8位字符串。

我对字符编码没有足够的了解,但我猜这与编码字符串的方式有关。     知道会出现什么问题吗?

2 个答案:

答案 0 :(得分:0)

这似乎是相关的:

Linux: where are environment variables stored?

  

为了将值设置为现有环境变量,我们使用赋值表达式。例如,要将“LANG”变量的值设置为“he_IL.UTF-8”,我们使用以下命令:

LANG=he_IL.UTF-8

https://help.ubuntu.com/community/EnvironmentVariables

或者,您可以执行终端命令以获取system()的环境变量。该页面告诉您要包​​含哪些库以及正确的使用信息。

答案 1 :(得分:0)

事实上,在Windows上,您为每个环境变量获得相同的大小是非常可疑的。我怀疑你没有正确打印尺寸,这与任何编码无关。

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> env;
    for (char **en=environ; *en; en++)   {
        std::string str(*en);
        std::cout << str.size() << '\n';
        env.push_back(str);
    }
}

http://ideone.com/If9ut

18
33
16
16
17
7