gpt4 book ai didi

C 字符串编码 Windows/Linux

转载 作者:太空狗 更新时间:2023-10-29 17:23:28 24 4
gpt4 key购买 nike

如果我获取包含 7 位 ASCII 表之外字符的字符串的长度,我在 Windows 和 Linux 上会得到不同的结果:

Windows: strlen("ö") = 1
Linux: strlen("ö") = 2

在 Windows 机器上,字符串显然以“扩展”ascii 格式编码为 0xF6,而在 Linux 机器上,它以 UTF-8 编码为 0xC3 0x96,给出 2 个字符的长度。

问题:

为什么 C 字符串在 Windows 和 Linux 机器上的编码不同?


这个问题是在我与 Code Review ( see this thread) 论坛成员的讨论中提出的。

最佳答案

Why does a C string gets differently encoded on a Windows and a Linux machine?

首先,这不是 Windows/Linux(操作系统)问题,而是编译器问题,因为 Windows 上存在编译器,其编码类似于 gcc(在 Linux 上很常见)。

这是 C 允许的,并且两个编译器制造商已经根据他们自己的编程目标制定了不同的实现,MS 使用 CP-1252和 Linux 使用 Unicode . @Danh . MS 的选择早于 Unicode。不同的编译器制造商采用不同的解决方案也就不足为奇了。

5.2.1 Character sets
1 Two sets of characters and their associated collating sequences shall be defined: the set in which source files are written (the source character set), and the set interpreted in the execution environment (the execution character set). Each set is further divided into a basic character set, whose contents are given by this subclause, and a set of zero or more locale-specific members (which are not members of the basic character set) called extended characters. The combined set is also called the extended character set. The values of the members of the execution character set are implementation-defined. C11dr §5.2.1 1 (My emphasis)

strlen("ö") = 1
strlen("ö") = 2

“ö” 根据编译器的源字符扩展字符 进行编码。

我怀疑 MS 专注于维护他们的代码库并鼓励使用其他语言。 Linux 只是 Unicode 到 C 的早期适配器,尽管 MS 一直是 Unicode 的早期影响者。

作为Unicode support grows ,我希望这将成为 future 的解决方案。

关于C 字符串编码 Windows/Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309595/

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