gpt4 book ai didi

c - 如何在 C 程序中将俄语字符串作为命令行参数处理

转载 作者:行者123 更新时间:2023-12-02 09:36:43 28 4
gpt4 key购买 nike

我有一个从 C 代码构建的 exe 文件。存在一种情况,俄语字符串作为参数传递给此 exe。

当我用这个参数调用 exe 时,任务管理器将俄语字符串完美地显示为命令行参数。

但是当我从 exe 中打印该参数时,它只会打印 ???

如何让我的 C 程序(因此是 exe)处理俄语字符?

最佳答案

答案取决于您的程序的目标平台。传统上,C 或 C++ 程序从 main(....) 函数开始其生命周期,该函数可能会将面向字节的字符串作为参数传递(注意 主声明中的 char* int main(int argc, char* argv[]))。面向字节的字符串意味着字符串中的字符以特定的面向字节的编码和一个字符传递,例如 UTF-8< 中的 ЯÑ/code> 可能需要超过 1 个字符

目前Linux/Unix平台上使用最广泛的编码是UTF-8 ,但不久前还有其他编码在使用,例如 ISO8859-1、KOI8-R 和许多其他编码。大多数程序仍然是面向字节的,因为 UTF-8 编码大部分向后兼容所有传统的 C 字符串 API。

另一方面,宽字符串使用起来更方便,因为宽字符串中的每个字符都使用预定义的空格。因此,例如,以下表达式通过断言测试: std::wstring hello = L"Привет!¡Hola!"; assert(L'в' == hello[3]); (如果使用 UTF-8 字符串,测试将失败)。因此,如果您的程序对字母而不是整个字符串执行大量操作,那么宽字符串可能是解决方案。

要将字符串从多字节编码转换为宽字符编码,您可以使用 mbtowc函数系列或令人敬畏的奇特codecvt C++-11 工具(如果您的编译器支持的话)(截至 2014 年中期可能不支持:))

在 Windows 中,字符串也可以作为面向字节的字符串传递,对于俄语,最有可能使用 CP1251(取决于操作系统设置,但对于在俄罗斯和独联体国家销售的 Windows,这是最流行的变体)。 MSVC 还有一个语言扩展,允许应用程序程序员通过手动将字节串转换为宽字符串来避免所有这些复杂性,并使用 main() 函数的变体,instantly receives widestrings

关于c - 如何在 C 程序中将俄语字符串作为命令行参数处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277980/

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