【问题标题】:Unable to decode a javascript escaped string which contains japanese text in iOS ObjectiveC无法在 iOS Objective C 中解码包含日文文本的 javascript 转义字符串
【发布时间】:2015-08-04 06:14:29
【问题描述】:

我从一个被 javascript 转义的 UIWebview 获取以下字符串 n cookie。

"%7B%27status%27%20%3A%20400%2C%20%27message%27%20%3A%20%27%u30C6%u30B9%u30C8%u30E1%u30C3%u30BB%u30FC%u30B8%27"

我正在使用下面的函数来获取未转义的字符串。

NSString *decodeString = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
decodeString = [decodeString stringByReplacingOccurrencesOfString:@""" withString:@"\""];

预期的输出是

"{'status' : 400, 'message' : 'テストメッセージ'}"

但是*decodeStringnil

什么是正确的解码方法。

谢谢。

【问题讨论】:

  • 我试过这个。但我越来越空了。
  • @LeenaPatel 当我用"%7B%27status%27%20%3A%20400%2C%20%27message%27%20%3A%20%27" 测试它时,它意味着在 %u 之前 ....它工作正常...但是当我在 %u 之后添加字符串时它给出 nil ...意味着问题是%u30B9%u30C8%u30E1%u30C3%u30BB%u30FC%u30B数据
  • @Bhavin 在从服务器端发送日语消息时,“テストメッセージ”正在转换为“%u30C6%u30B9%u30C8%u30E1%u30C3%u30BB%u30FC%u30B8”,之后它执行 UTF8编码。
  • 是的。如果消息是英文的,我可以使用 NSUTF8Encoding 对其进行解码。但是对于日语消息,它给零。

标签: javascript ios objective-c uiwebview decoding


【解决方案1】:

我的第一个快速解决方案是将 utf 图表和 unicode 图表分开,如下所示:

NSString *string = @"%7B%27status%27%20%3A%20400%2C%20%27message%27%20%3A%20%27%u30C6%u30B9%u30C8%u30E1%u30C3%u30BB%u30FC%u30B8%27";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"%27message%27(.*)%27" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""];
NSLog(@"%@", modifiedString);

NSString *decodeString = [modifiedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", decodeString);

最好使用这个:

NSString *str = @"%7B%27status%27%20%3A%20400%2C%20%27message%27%20%3A%20%27%u30C6%u30B9%u30C8%u30E1%u30C3%u30BB%u30FC%u30B8%27";
str = [str stringByReplacingOccurrencesOfString:@"%u" withString:@"\\u"];
NSString *convertedStr = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",convertedStr);

在这种情况下是输出:

{'status' : 400, 'message' : '\u30C6\u30B9\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8' 

在这种情况下,您必须处理 unicode 图表 .... 我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2015-12-28
    • 2011-04-06
    相关资源
    最近更新 更多