gpt4 book ai didi

没有 libiconv 的 C 字符串编码 UTF8

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:31 26 4
gpt4 key购买 nike

我知道大多数语言都回答了这个问题,但我还没有找到 C 的解决方案,或者我误解了什么。

我已经声明了一个“char *strSSID”。我在处理表单页面的 POST 参数的 Web 服务器中有一个函数。此函数在“srtSSID”中返回一个名为 SSID 的参数,用于配置无线的 SSID 名称。但问题是 SSID 中的特殊字符(如“ñ”)在 Linux 中可以正常显示,而在我的手机或 Windows 中则显示为奇怪字符。

我知道问题出在编码上。在我的平台(mips 和 uclibc 库)中,像“ñ”这样的特殊字符存储在两个位置(我的意思是例如“srtSSID[0]”和“strSSID[1]”存储 SSID 的第一个“ñ”字符) 的 strSSID。

我需要一些帮助。

谢谢

最佳答案

为了在 SSID 中使用 UTF-8 字符,802.11 规范要求需要设置扩展功能元素的 UTF-8 SSID 子字段。如果您发现 UTF-8 SSID 在某些设备上不起作用,可能是因为它们没有正确设置扩展功能元素,或者它们可能只是不支持该功能。

802.11 规范没有说明如果未启用 UTF-8 SSID 功能应如何解释字符,但我怀疑这通常意味着只有 ASCII 字符有效,在这种情况下,您的 ñ 永远不会起作用。

也就是说,您可能只是转换为 Latin1 就取得了一些成功。如果您无法访问执行字符集转换的库,这里有一个基本的转换函数,应该足以满足您的需求。

void utf8tolatin1(char *s) {
size_t i = 0, j = 0;
char c;
do {
c = s[i++];
if ((c&0xFC) == 0xC0 && s[i])
c = (c<<6) + (s[i++]&0x3F);
s[j++] = c;
} while(c != 0);
}

请注意,这只会转换 Latin1 范围内的 UTF-8 字符 - 其他一切保持原样。如果您的 SSID 包含超出该范围的字符,您可能无法执行任何操作。

关于没有 libiconv 的 C 字符串编码 UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16714278/

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