精华内容
下载资源
问答
  • unescape

    千次阅读 2014-05-12 16:53:30
    + (NSString*) unescapeUnicodeString:(NSString*)string ... // unescape quotes and backwards slash  NSString* unescapedString = [string stringByReplacingOccurrencesOfString:@"\\\"" withString:@

    + (NSString*) unescapeUnicodeString:(NSString*)string

    {

        // unescape quotes and backwards slash

        NSString* unescapedString = [string stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];

        unescapedString = [unescapedString stringByReplacingOccurrencesOfString:@"\\\\" withString:@"\\"];

        


        // tokenize based on unicode escape char

        NSMutableString* tokenizedString = [NSMutableString string];

        NSScanner* scanner = [NSScanner scannerWithString:unescapedString];

        while ([scanner isAtEnd] == NO)

        {

            // read up to the first unicode marker

            // if a string has been scanned, it's a token

            // and should be appended to the tokenized string

            NSString* token = @"";

            [scanner scanUpToString:@"%u" intoString:&token];

            NSLog(@"%@",token);

            if (token != nil && token.length > 0)

            {

                token = [token substringFromIndex:1];

                unichar codeValue = (unichar) strtol([token UTF8String], NULL, 16);

                [tokenizedString appendString:[NSString stringWithFormat:@"%C", codeValue]];

                NSLog(@"%@",[NSString stringWithFormat:@"%C", codeValue]);

    //            [tokenizedString appendString:token];

                continue;

            }

            

            // skip two characters to get past the marker

            // check if the range of unicode characters is

            // beyond the end of the string (could be malformed)

            // and if it is, move the scanner to the end

            // and skip this token

            NSUInteger location = [scanner scanLocation];

            NSInteger extra = scanner.string.length - location - 4 - 2;

            if (extra < 0)

            {

                NSRange range = {location, -extra};

                [tokenizedString appendString:[scanner.string substringWithRange:range]];

                [scanner setScanLocation:location - extra];

                continue;

            }

            

            // move the location pas the unicode marker

            // then read in the next 4 characters

            location += 2;

            NSRange range = {location, 4};

            token = [scanner.string substringWithRange:range];

            unichar codeValue = (unichar) strtol([token UTF8String], NULL, 16);

            [tokenizedString appendString:[NSString stringWithFormat:@"%C", codeValue]];

            

            // move the scanner past the 4 characters

            // then keep scanning

            location += 4;

            [scanner setScanLocation:location];

        }

        DLog(@"................%@",tokenizedString);

        // done

        return tokenizedString;

    }


    + (NSString*) escapeUnicodeString:(NSString*)string

    {

        // lastly escaped quotes and back slash

        // note that the backslash has to be escaped before the quote

        // otherwise it will end up with an extra backslash

        NSString* escapedString = [string stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];

        escapedString = [escapedString stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];

        

        // convert to encoded unicode

        // do this by getting the data for the string

        // in UTF16 little endian (for network byte order)

        NSData* data = [escapedString dataUsingEncoding:NSUTF16LittleEndianStringEncoding allowLossyConversion:YES];

        size_t bytesRead = 0;

        const char* bytes = data.bytes;

        NSMutableString* encodedString = [NSMutableString string];

        

        // loop through the byte array

        // read two bytes at a time, if the bytes

        // are above a certain value they are unicode

        // otherwise the bytes are ASCII characters

        // the %C format will write the character value of bytes

        while (bytesRead < data.length)

        {

            uint16_t code = *((uint16_t*) &bytes[bytesRead]);

            if (code > 0x007E)

            {

                [encodedString appendFormat:@"%%u%04X", code];

            }

            else

            {

                [encodedString appendFormat:@"%C", code];

            }

            bytesRead += sizeof(uint16_t);

        }

        

        // done

        return encodedString;

    }



    +(NSString *)StringDecodeJava:(NSString *)src

    {

        NSMutableString *tmp = [NSMutableString string];

        int lastPos = 0, pos = 0;

        NSScanner* scanner = [NSScanner scannerWithString:src];

        while (lastPos < src.length) {

            NSString* token = @"";

            [scanner scanUpToString:@"%" intoString:&token];

            pos = [scanner scanLocation];

            if (pos == lastPos) {

                if ([src characterAtIndex:(pos + 1)] == 'u') {

                    NSString *t = [src substringWithRange:NSMakeRange(pos+2, 4)];

                    unichar codeValue = (unichar) strtol([t UTF8String], NULL, 16);

                    [tmp appendString:[NSString stringWithFormat:@"%C", codeValue]];

                    lastPos = pos + 6;

                    

                }

                else {

                    NSString *t = [src substringWithRange:NSMakeRange(pos+1, 2)];

                    unichar codeValue = (unichar) strtol([t UTF8String], NULL, 16);

                    [tmp appendString:[NSString stringWithFormat:@"%C", codeValue]];

                    lastPos = pos + 3;

                }

            }

            else if (pos == -1) {

                [tmp appendString:[src substringFromIndex:lastPos]];

                lastPos = src.length;

            }

            else {

                [tmp appendString:[src substringWithRange:NSMakeRange(lastPos, pos-lastPos)]];;

                lastPos = pos;

            }

            [scanner setScanLocation:lastPos];

        }

        return tmp;

    }


    展开全文
  • gulp-unescape-html 用于 unescape html 的 Gulp 插件 入门 安装: npm install --save-dev gulp-unescape-html 如何使用: var unescapeHtml = require('gulp-unescape-html') gulp.task('unescaped', ...
  • rust-unescape-源码

    2021-03-30 20:21:55
    rust-unescape
  • 前端开源库-unescape-js

    2019-08-30 04:55:29
    前端开源库-unescape-jsunescape js,unescape javascript特殊字符
  • escape unescape的php下的实现方法
  • 主要介绍了如何用unescape反编码得出汉字,需要的朋友可以参考下
  • JavaScript unescape

    2016-10-04 09:56:00
    unescape() 函数可对通过 escape() 编码的字符串进行解码 转载于:https://www.cnblogs.com/zhangzhiqian/p/5930111.html

    unescape() 函数可对通过 escape() 编码的字符串进行解码

    转载于:https://www.cnblogs.com/zhangzhiqian/p/5930111.html

    展开全文
  • php模拟js函数unescape的函数代码,需要的朋友可以参考下
  • 主要介绍了PHP实现JS中escape与unescape的方法,通过json_encode和json_decode方法实现JS中escape与unescape函数的功能,需要的朋友可以参考下
  • UNESCAPE HTML实体

    2019-03-14 14:23:05
    这段代码可能对某些人有用, ef parsefile(path): try: file = open(path, "r") fileread = file.read()... fileread = unescape(fileread.decode('utf-8')).encode('utf-8') file.close() exce...

    这段代码可能对某些人有用,

    ef parsefile(path):
    
       try:
    
          file = open(path, "r")
    
          fileread = file.read()
    
          fileread = unescape(fileread.decode('utf-8')).encode('utf-8')
    
          file.close()
    
       except:
    
          print "Reading File Bug"
    
          sys.exit(1)
    
       return ET.fromstring(fileread)
    

    该吃UNESCAPE HTML实体程序已于弗雷德里克Lundh开发网站上找到。

    def unescape(text):
    
       """Removes HTML or XML character references
    
          and entities from a text string.
    
          keep &amp;,& gt; &ltin the source code.
    
       from Fredrik Lundh
    
       http://effbot.org/zone/re-sub.htm#unescape-html
    
       """
    
       def fixup(m):
    
          text = m.group(0)
    
          if text[:2] == "&#":
    
             # character reference
    
             try:
    
                if text[:3] == "&#x":
    
                   return unichr(int(text[3:-1], 16))
    
                else:
    
                   return unichr(int(text[2:-1]))
    
             except ValueError:
    
                print "erreur de valeur"
    
                pass
    
          else:
    
             # named entity
    
             try:
    
                if text[1:-1] == "amp":
    
                   text = "&amp;"
    
                elif text[1:-1] == "gt":
    
                   text = "&gt;"
    
                elif text[1:-1] == "lt":
    
                   text = "&lt;"
    
                else:
    
                   print text[1:-1]
    
                   text = unichr(htmlentitydefs.name2codepoint])
    
             except KeyError:
    
                print "keyerror"
    
                pass
    
          return text # leave as is
    
       return re.sub("&#?w+;", fixup, text)
    

    希望能帮助到你。

    展开全文
  • javascript-escape-unescape Javascript Escape / Unescape 使用编码的Escape / Unescape特殊字符 图片示例:
  • 在PHP和Python中都有类似JS中的escape和UNescape函数的功能,那么Java语言中到底有没有类似的方法呢?本文就来介绍一下Java实现JS中的escape和UNescape转码方法,需要的朋友可以参考下
  • python3.9报错 "AttributeError: 'HTMLParser' object has no attribute 'unescape'" 异常分析解决。

    有的bug,莫名其妙就好了…

    推荐一个好东西:这大概是所有python程序员都会喜欢的惊喜吧!

    python3.9 报错 “AttributeError: 'HTMLParser' object has no attribute 'unescape'” 异常分析解决。

    一、问题描述

    安装 python3.9 版本后,pycharm 中切换 python3.9 版本,创建虚拟环境报错:"AttributeError: 'HTMLParser' object has no attribute 'unescape'"。

    Executed command:
        C:\Users\程序员的一天\AppData\Local\Temp\tmp41_yhcxspycharm-management\setuptools-40.8.0\setup.py install
    
    Error occurred:
        AttributeError: 'HTMLParser' object has no attribute 'unescape'
    
    Command output:
    Traceback (most recent call last):
      File "C:\Users\程序员的一天\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setup.py", line 11, in <module>
        import setuptools
      File "C:\Users\程序员的一天\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setuptools\__init__.py", line 20, in <module>
        from setuptools.dist import Distribution, Feature
      File "C:\Users\程序员的一天\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setuptools\dist.py", line 35, in <module>
        from setuptools.depends import Require
      File "C:\Users\程序员的一天\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setuptools\depends.py", line 7, in <module>
        from .py33compat import Bytecode
      File "C:\Users\程序员的一天\AppData\Local\Temp\tmp0mv4mj35pycharm-management\setuptools-40.8.0\setuptools\py33compat.py", line 55, in <module>
        unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)
    AttributeError: 'HTMLParser' object has no attribute 'unescape'
    
    

    查看官网 python3.9changelog,发现 HTMLParser.unescape 属性被移除了,并且从 python3.4 开始就被弃用。

    python3.9 changelog

    pycharm 创建虚拟环境时,会使用到 setuptools。而 setuptools 中,刚好使用了这个属性,所以,导致了"AttributeError: 'HTMLParser' object has no attribute 'unescape'"异常。

    经过各种分析、尝试,问题最终得到解决。记录下过程,避免更多人踩坑。

    二、解决方法

    先给出解决方法,感兴趣的朋友,可以继续阅读后面的分析部分。

    解决这个问题,分两种情况:

    1. 不通过 pycharm 编辑器,直接使用 python 解释器。
    2. 在 pycharm 编辑器中使用 python 解释器。
    

    我是在 pycharm 中使用 python3.9 触发报错,所以这里也单独提出来讨论讨论。

    2.1、直接使用 python 解释器

    不通过 pycharm 编辑器,直接使用 python 解释器。比如,在 windowscmd ,或 linux 下的命令行中使用 python

    解决方法:更新 setuptools 版本。
    我以 python3.9 使用 setuptools 为例,测试如下。

    2.1.1、setuptools 低版本触发报错

    setuptools-40.8.0 为例,测试触发报错如下:

    第一步,使用 python3.9 下的 pip 卸载之前安装的 setuptools:

    E:\soft\python\python39\install>pip uninstall setuptools
    

    第二步,安装 setuptools-40.8.0

    E:\soft\python\python39\install>pip install setuptools==40.8.0
    Collecting setuptools==40.8.0
      Using cached setuptools-40.8.0-py2.py3-none-any.whl (575 kB)
    Installing collected packages: setuptools
    Successfully installed setuptools-40.8.0
    

    第三步,在 python3.9 中导入包触发报错:

    E:\soft\python\python39\install>python
    Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import setuptools
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "E:\soft\python\python39\install\lib\site-packages\setuptools\__init__.py", line 20, in <module>
        from setuptools.dist import Distribution, Feature
      File "E:\soft\python\python39\install\lib\site-packages\setuptools\dist.py", line 35, in <module>
        from setuptools.depends import Require
      File "E:\soft\python\python39\install\lib\site-packages\setuptools\depends.py", line 7, in <module>
        from .py33compat import Bytecode
      File "E:\soft\python\python39\install\lib\site-packages\setuptools\py33compat.py", line 55, in <module>
        unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)
    AttributeError: 'HTMLParser' object has no attribute 'unescape'
    
    2.1.2、setuptools 高版本解决报错

    setuptools-49.2.1 为例,测试如下:

    第一步,卸载之前安装的 setuptools:

    E:\soft\python\python39\install>pip uninstall setuptools
    Found existing installation: setuptools 40.8.0
    Uninstalling setuptools-40.8.0:
      Would remove:
        e:\soft\python\python39\install\lib\site-packages\easy_install.py
        e:\soft\python\python39\install\lib\site-packages\pkg_resources\*
        e:\soft\python\python39\install\lib\site-packages\setuptools-40.8.0.dist-info\*
        e:\soft\python\python39\install\lib\site-packages\setuptools\*
        e:\soft\python\python39\install\scripts\easy_install-3.9.exe
        e:\soft\python\python39\install\scripts\easy_install.exe
    Proceed (y/n)? y
      Successfully uninstalled setuptools-40.8.0
    

    第二步,安装 setuptools==49.2.1:

    E:\soft\python\python39\install>pip install setuptools==49.2.1
    Collecting setuptools==49.2.1
      Using cached setuptools-49.2.1-py3-none-any.whl (789 kB)
    Installing collected packages: setuptools
    Successfully installed setuptools-49.2.1
    

    第三步,在 python3.9 中导入包:

    E:\soft\python\python39\install>python
    Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import setuptools
    >>> setuptools.__version__
    '49.2.1'
    >>>
    

    目前最新版本,应该是到 setuptools-50.3.2 了 。


    2.2、在 pycharm 中使用 python 解释器

    pycharm 中创建 python3.9 虚拟环境报错,本质上也是使用了 setuptools 的低版本导致。
    我尝试过更新 setuptools 为更高的版本,但 pycharm 还是顽固的使用了 setuptools-40.8.0,如最开始的报错信息所示…

    我不知道是 pycharm 中的某些默认配置导致,还是 pycharm 的版本属性导致它使用了低版本的 setuptools,如果有朋友知道,欢迎告知。

    虽然,不知道 pycharm 中选择低版本 setuptools 的原因。这里,也简单提供两种解决方法吧~

    2.2.1、virtualenv 创建虚拟环境

    virtualenv 为应用提供隔离的 Python 运行环境,可以解决不同应用间多版本 python 的冲突问题。

    利用 virtualenv 创建虚拟环境后,pycharm 中创建虚拟环境时,选择已存在的虚拟环境,可以避开报错。

    第一步: 确认 python3.9 对应的 pip 工具。
    如果没有配环境变量,可以直接从安装路径下打开 cmd 工具。一般在 python 安装目录下的 Scripts 文件夹内。使用 pip -V 可以查看 pip 对应的 python 版本。

    E:\soft\python\python39\install>pip -V
    pip 20.2.4 from e:\soft\python\python39\install\lib\site-packages\pip (python 3.9)
    
    

    第二步: 安装 virtualenv

    pip install virtualenv
    

    第三步: 创建虚拟环境。
    virtualenv 指令用于创建虚拟环境,后跟虚拟环境保存路径。

    virtualenv E:\soft\python\python39\env
    

    如果需要删除虚拟环境,直接删除对应文件夹即可。

    第四步: pycharm 中选择已存在的虚拟环境。
    "File --> Settings --> Python Interpreter",进入对应界面。

    pycharm中选择已存在虚拟环境

    这里,需要选择到虚拟环境中的 python.exe,否则 OK 键为灰色,无法点击。

    通过该方法,可以在原本报错的 pycharm 中创建 python3.9 虚拟环境。

    2.2.2、pycharm 版本更换

    报错版本为:pycharm-community-2019.2.1
    下载安装最新版本:pycharm-community-2020.2.3

    点击运行要安装的 pycharm-community-2020.2.3.exe 文件,会自动检测,提示卸载已安装的pycharm

    为避免其他问题,卸载过程中,可以选择删除旧版本配置等。

    卸载过程中选择删除缓存配置和已安装插件等

    经过测试,使用最新版本 pycharm 可以成功创建 python3.9 虚拟环境。
    为了验证是否为 pycharm 的版本兼容问题,我卸载最新版本,重新安装旧版本 pycharm 后,依然报错!我猜测是固定的 pycharm 版本,使用了固定的某些 setuptools 版本,导致了兼容性报错。

    我也怀疑过是系统中多个版本 python 的环境变量顺序,导致pycharm 找到了错误的依赖项。尝试在环境变量中将 python3.9 相关值移动到最前面,依然不能解决问题。

    看来,最新的 python 还是得配最新的 pycharm编码界的爱情故事么…

    三、原因分析

    感兴趣的朋友,欢迎继续阅读。

    Traceback 报错日志中,可以看到,是在 setuptools-40.8.0\setuptools\py33compat.py 的55行, 执行 unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape) 时,抛出了 AttributeError: 'HTMLParser' object has no attribute 'unescape' 异常。

    可以肯定是由 setuptools 引起的报错。这里有一个关键的信息:py33compat.py 文件。
    pyXXcompat.pysetuptools 兼容 python 版本相关的文件。

    进入到 ..\Lib\site-packages\setuptools 查看 setuptools-40.8.0 的安装文件,可以看到,包含了 py27compat.pypy31compat.pypy33compat.py

    setuptools-40.8.0兼容文件

    进入到 ..\Lib\site-packages\setuptools 查看 setuptools-49.2.1 的安装文件,可以看到,只包含了 py34compat.py

    setuptools-49.2.1兼容文件

    而我们从 python3.9changelog 中,可以知道 HTMLParser.unescape 属性被移除了,并且从 python3.4 开始就被弃用了。

    所以,从兼容 python3.4 开始,setuptools 中就放弃了使用 HTMLParser.unescape
    因此,只要包含 py34compat.py 文件的 setuptools 版本,就能兼容 python3.9 版本。

    END.

    原创不易,点个赞呗!如果喜欢,可以打赏请作者喝奶茶哟:)

    工作之余,喜欢写些东西,记录生活、总结技术。感兴趣的微信朋友,可以搜一搜:【程序员的一天】,欢迎关注、支持,谢谢!

    展开全文
  • 主要介绍了node.js中的querystring.unescape方法使用说明,本文介绍了querystring.unescape的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
  • unescapeIf we have an encoded data which has been encoded using the escape() function, and we need the actual data, in such case – we use unescape() function. This is also a predefined function in ...
  • js中的escape及unescape函数的php实现代码
  • 本篇文章是对使用PHP实现javascript的escape和unescape函数的方法进行了详细的分析介绍,需要的朋友参考下
  • VB Unescape

    2012-08-08 19:17:13
    Public Function unescape(szEscape As String) As String Dim i As Long, l As Long Dim c As String, s As String l = Len(szEscape) unescape = "" For i = 1 To l c = Mid$(sz
  • 前端开源库-unescape-htmlunescape html,与escape html相反
  • 主要介绍了详解JavaScript中的unescape()和String() 函数,JavaScript unescape() 函数可对通过 escape() 编码的字符串进行解码,String() 函数把对象的值转换为字符串,对本文感兴趣的朋友一起学习吧
  • 主要介绍了escape编码与unescape解码汉字出现乱码的解决方法,需要的朋友可以参考下
  • JavaScript unescape() 函数

    2019-10-25 11:50:33
    JavaScript unescape() 函数 定义和用法 unescape() 函数可对通过 escape() 编码的字符串进行解码。 语法 unescape(string) 参数 描述 string 必需。要解码或反转义的字符串。 返回值 string 被解码后的一个副本。 ...
  • unescape加html加解密很好用的东西,JS把HTML加密很好用的东西。
  • 主要介绍了PHP实现Javascript中的escape及unescape函数代码分享,本文给出两个实现版本,需要的朋友可以参考下
  • 从网上看到两个方法, C# 版的 Escape() 和 Unescape(),收藏下。
  • 本工具类用java实现了JavaScript escape/unescape 编码。对接建行支付以及需要向后端传输中文数据时可以使用得到
  • js escope unescape

    2017-03-23 16:12:54
    js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,047
精华内容 15,618
关键字:

unescape