是否可以使用Unicode"argv"?

Joh*_*ohn 14 c unicode command-line-arguments

我正在为一个使用文件作为参数的应用程序编写一个小包装器.

包装器需要是Unicode,所以我使用wchar_t作为我拥有的字符和字符串.现在我发现自己遇到了问题,我需要在wchar_t和wchar_t字符串数组中包含程序的参数.

可能吗?我将main函数定义为

int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)

我应该使用wchar_t argv吗?

非常感谢,我似乎没有找到有关如何在C中正确使用Unicode的有用信息.

Jon*_*ler 11

一般来说,没有.它取决于O/S,但C标准说'main()'的参数必须是'main(int argc,char**argv)'或等价,所以除非char和wchar_t是相同的基本类型,你不能这样做.

话虽如此,你可以在程序中获得UTF-8参数字符串,将它们转换为UTF-16或UTF-32,然后继续生活.

在Mac(10.5.8,Leopard)上,我得到了:

Osiris JL: echo "ï€" | odx
0x0000: C3 AF E2 82 AC 0A                                 ......
0x0006:
Osiris JL: 
Run Code Online (Sandbox Code Playgroud)

这都是UTF-8编码的.(odx是一个十六进制转储程序).

另请参阅:为什么在与UNIX/Linux环境交互时使用UTF-8编码


Jer*_*fin 10

便携式代码不支持它.Windows(例如)支持使用wmain而不是main,在这种情况下,argv作为宽字符传递.


Rem*_*eau 7

在Windows上,即使应用程序未针对Unicode编译,您也可以使用GetCommandLineW()CommandLineToArgvW()生成argv样式的wchar_t[]数组.