![]() |
1
27
你说它肯定是UTF-8,但是如果没有内容类型头,你就不知道这一点(即使你确实有一个标题这样说,它仍然可能是错误的。)
我的猜测是,您的数据通常是ASCII,它总是正确地解析为UTF-8,但有时您试图解析实际编码为ISO8859-1或Windows代码页1252的数据。这类数据通常是ASCII,但有些字节超出ASCII定义的0127范围。UTF-8期望这样的字节在指定的范围序列内形成一个代码单元序列,但是在其他编码中,任何字节,不管值是多少,都是一个独立的完整字符。尝试将非ASCII非UTF-8数据解释为UTF-8几乎总是会得到错误的结果(错误的字符)或根本没有结果(无法解码;解码器返回
|
![]() |
2
9
正如Peter所说,content-type头只是发送内容的“提示”。在服务器端,您可以设置任何内容类型并发送任何字节序列,这可能是无效的。
Wikipedia about UTF-8 了解这个问题以及如何处理编码错误是值得一读的。
(所有UTF-8字符都不正确,仅针对一个拉丁1不稳定字符) 最好的选择是在服务器端修复,当然,但我不负责这方面。。。 其原理是使用iconv删除非UTF-8无效字符(即“prt”将变为“prt”)
那么结果呢
通过对unicode错误使用回退,可以使用替换字符或更好的字符来尝试其他编码。 |
![]() |
3
5
|
![]() |
4
3
数据可能是另一种unicode编码,比如UTF16,或者是完全不同的编码。 有些库可以猜测数据中使用的编码,但这应该是最后的手段。 如果您使用的是web服务,那么该web服务应该有一个说明它使用哪种编码的文档。查找它,或者询问web服务的提供者它使用哪种编码。如果两者都不可用,则应尝试获取样本数据并确定其编码,然后在程序中使用该编码。
|
![]() |
5
0
等一下,操作程序首先是从网上读取的,对吗?为什么不使用NSString
|
![]() |
Noah H · 如何通过终端或Swift禁用三指轻拍手势? 7 年前 |
![]() |
Dmitry Serov · 货币数字格式-数字为整数时省略分数部分 7 年前 |
![]() |
Duny · ObjC日期始终返回2017年12月25日 7 年前 |
![]() |
Jan Kaiser · NSButton不调用其操作 7 年前 |