gpt4 book ai didi

c++ - 通过 C++ main char** args 处理不同字符串编码的正确方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:31 24 4
gpt4 key购买 nike

我需要一些说明。

问题是我有一个用 C++ 编写的 Windows 程序,它使用“wmain”Windows 特定函数,该函数接受 wchar_t** 作为其参数。因此,有机会将任何你喜欢的东西作为命令行参数传递给这样的程序:例如,中文符号、日文符号等。

老实说,我没有关于这个函数通常使用的编码的信息。可能是 utf-32,甚至是 utf-16。所以,问题:

  • 用标准的 main 函数实现这一点的不是 windows 特定的,而是 unix/linux 的方法是什么?我的第一个想法是使用 utf-8 编码的输入字符串并指定某种语言环境?

  • 有人可以举一个这样的 main 函数的简单例子吗? std::string 怎么能装中文符号呢?

  • 当我们像这样访问每个字符(字节)时,我们能否像往常一样使用以 utf-8 编码并包含在 std::strings 中的中文符号:string_object[i]?

最佳答案

免责声明:所有中文单词由GOOGLE translate service提供.

1) 只需使用普通的 std::string 照常进行即可。 std::string 可以保存任何字符编码,参数处理是简单的模式匹配。因此,在安装了中文版程序的中文计算机上,它需要做的就是将中文版的标志与用户输入的内容进行比较。

2) 例如:

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

std::string arg_switch = "开关";
std::string arg_option = "选项";
std::string arg_option_error = "缺少参数选项";

int main(int argc, char* argv[])
{
const std::vector<std::string> args(argv + 1, argv + argc);

bool do_switch = false;
std::string option;

for(auto arg = args.begin(); arg != args.end(); ++arg)
{
if(*arg == "--" + arg_switch)
do_switch = true;
else if(*arg == "--" + arg_option)
{
if(++arg == args.end())
{
// option needs a value - not found
std::cout << arg_option_error << '\n';
return 1;
}
option = *arg;
}
}

std::cout << arg_switch << ": " << (do_switch ? "on":"off") << '\n';
std::cout << arg_option << ": " << option << '\n';

return 0;
}

用法:

./program --开关 --选项 wibble

输出:

开关: on
选项: wibble

3) 否

对于 UTF-8/UTF-16 数据,我们需要使用特殊的库,例如 ICU

对于逐字符处理,您需要使用或转换为 UTF-32。

关于c++ - 通过 C++ main char** args 处理不同字符串编码的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29781056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com