美文网首页
iOS字符串如何转为Raw String

iOS字符串如何转为Raw String

作者: frog78 | 来源:发表于2019-01-18 10:31 被阅读0次

    问题分析

    在javascript ES6中,String多了一个方法String.raw``,详见http://docs.w3cub.com/javascript/global_objects/string/raw/。String.raw``可以把一个普通的字符串转为Raw String。

    举个栗子,字符串"\abc",是3个字符构成,分别是'\a','b','c',通过String.raw``后,可以变成4个字符:'\','a','b','c',也就是把字符串中的'\'表示其本身,而不是转义符。也就是把"\abc"转变成了"\\abc"。

    但是在iOS中没有String.raw``类似的方法,而且在iOS9以下UIWebView/WKWebView中,不支持ES6语法,没办法使用String.raw``,所以只能通过原生转换。那么在iOS中如何转换呢?

    最容易想到的是通过替换,把"\"替换成"\\"不就行了?思路是对的,但是替换不了,因为"\"不是一个单独的字符,"\a"才是一个字符。

    那么把"\a"替换成"\\a"呢?貌似是可以的,但是前提是得知道"\"后面的字符。在实际中,很多情况是不知道"\"后面的字符的,或者知道但是字符特别多,都不好处理。

    这里提供一种方法可以完成转换,就是通过escape编码。

    实现过程

    对原字符串escape编码——替换——escape解码
    例如字符串"\abc",首先进行escape编码,编码方法请点击,编码后的字符串为"%5Cabc"。和原字符串相比可以发现,"\"变成了"%5C",其他的没有变化。是的,"\"不再是转义符,而变成了普通字符串,那么就可以对"%5C"进行替换了。如下所示

    NSString *str  = @"%5Cabc";
    [str stringByReplacingOccurrencesOfString:@"%5C" withString:@"%5C%5C"];
    

    这时候变为"%5C%5Cabc",最后再对str进行escape解码:

    str = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    

    那么,字符串str就变成"\\abc"了,相当于完成了Raw String的转变。

    相关文章

      网友评论

          本文标题:iOS字符串如何转为Raw String

          本文链接:https://www.haomeiwen.com/subject/acyidqtx.html