当我获取任何网页的来源时,无论我使用何种编码,我总是最终使用&# - 字符(例如©或®)而不是实际的字符本身。这也适用于外国人(例如瑞典语中的åäö),我必须从“& Aring”等解析。
我正在使用
+stringWithContentsOfUrl: encoding: error;
获取源并尝试了几种不同的编码,例如NSUTF8StringEncoding和NSASCIIStringEncoding,但似乎没有任何东西影响最终结果字符串。
非常感谢任何想法/提示/解决方案!我宁愿不必实现整个ASCII表并替换每个字符的所有出现...提前谢谢!
问候
答案 0 :(得分:1)
我正在使用
+stringWithContentsOfUrl: encoding: error;
获取源并尝试了几种不同的编码,例如NSUTF8StringEncoding和NSASCIIStringEncoding,但似乎没有任何东西影响最终结果字符串。
你误解了encoding:
论证的目的。该方法需要以某种方式将字节转换为字符;编码告诉它什么字节序列描述哪些字符。您需要确保编码与资源数据的编码匹配。
实体引用是SGML / XML的东西。 SGML和XML是不是编码;它们是标记语言语法。 stringWithContentsOfURL:encoding:error:
及其表兄弟不会尝试以任何方式解析字符序列(语法),这是他们将一个字符序列(实体引用)转换为另一个字符序列(实体,在实践中意味着单个字符,被引用)。
您可以使用the CFXMLCreateStringByUnescapingEntities
function将实体引用转换为未转义的字符。它需要一个CFString,NSString是(toll-free bridging),并返回一个CFString,它是一个NSString。
答案 1 :(得分:0)
你确定他们原来不是Å
形式吗?尝试首先在浏览器中查看源代码。
答案 2 :(得分:0)
真的,真的很糟糕。我想直接转换它,上面的解决方案并不是很好,所以我只编写了自己的ascii-table转换器(静态)类。因为本来应该工作(虽然我必须自己填写ascii表...)
优化的想法? (“ASCII”是静态NSDictionary)
@implementation InternetHelper
+(NSString *)HTMLSourceFromUrlWithString:(NSString *)str convertASCII:(BOOL)state
{
NSURL *url = [NSURL URLWithString:str];
NSString *source = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
if (state)
source = [InternetHelper ConvertASCIICharactersInString:source];
return source;
}
+(NSString *)ConvertASCIICharactersInString:(NSString *)str
{
NSString *ret = [NSString stringWithString:str];
if (!ASCII)
{
NSString *path = [[NSBundle mainBundle] pathForResource:kASCIICharacterTableFilename ofType:kFileFormat];
ASCII = [[NSDictionary alloc] initWithContentsOfFile:path];
}
for (id key in ASCII)
{
ret = [ret stringByReplacingOccurrencesOfString:key withString:[ASCII objectForKey:key]];
}
return ret;
}
@end