0

我有以下代码可以将 unicode 转换为适当的字符,例如当用户在浏览器中输入 úsername 时,%FAsername 会返回给代码,然后再将其转换回 úsername。

但是,当浏览器编码设置为 UTF-8 时,传递给代码的值是 %C3%BAsername,然后将其转换为 úsername,这是身份验证所需的错误值。如何修改代码以使其与 UTF-8 兼容?

4

1 回答 1

2

没有答案

有几件事有点不对劲。ú具有 unicode 编号 U+00FA,或者正如我们开发人员所说:0x00FA。Unicode 有 3x2^16 个字符。在 UTF-8 中使用多字节序列。对于 7 位纯 ASCII Unicode = ASCII。但是对于 U+00FA,需要多于一个字节。

%C3%BA似乎是正确的,因为 %XX 是一个字节,URL 编码。对于 U+0109, ĉ,一个字节,like%FA是不行的。

对于宽字符字符串的 UTF-8 解码/编码,存在足够的代码片段。

恐怕有些处理方式必须改变。


正常程序

一个人收到一个 URL 编码的字符串:带有 %XX。

char* url_decode(const char*) // would translate %xx to char.

现在你有一个字节流,以 UTF-8 形式到达:一个多字节 UTF-8 字符串。

wchar_t* utf8_decode(const char* bytes) // would translate bytes into text.

将多字节序列解析为 UTF-16 字符串。

于 2013-09-03T15:27:36.083 回答