特殊字符

微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?

大兔子大兔子 提交于 2020-02-13 08:38:25
本文来自微信开发团队yanyang的技术分享。 1、引言 相信大家都遇到过一段特殊文本可以让iOS设备所有app闪退的经历。前段时间大年初一,又出现某个印度语字符引起iOS11系统奔溃,所幸iOS版微信客户端做了保护并没有引起太大问题(字符处理这类技术问题,其实曾在Android版微信上导致过严重的用户体验危机,感兴趣的可以看看文章《 微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉 》)。 一般来说,特殊字符闪退是系统漏洞引起,只要更新系统就行。但大部分用户不愿意更新系统,而苹果也不一定第一时间解决问题。另外后台可以拦截恶意文本传递,但对于本地已下发的消息,后台没有办法让它删除。所以客户端还是要做些保护预防特殊字符闪退。 学习交流: - 即时通讯开发交流群: 320837163 [推荐] - 移动端IM开发入门文章:《 新手入门一篇就够:从零开发移动端IM 》 (本文同步发布于: http://www.52im.net/thread-1449-1-1.html ) 2、微信的思路 由于无法事先知道字符串里包含特殊字符,所以只能先让它排版/绘制,看看是否出现问题。做法是,在排版/绘制字符串前,先设置标记位,排版/绘制结束后,移除标记位。 一旦发现标记位存在,就意味着这字符串可能有问题,下次就不显示这个字符串: 这里有几个问题: 有可能在排版/绘制过程中

转义字符,正则表达式,特殊字符,模式匹配

£可爱£侵袭症+ 提交于 2020-02-13 07:14:42
1. 常见的 转义字符 字母前面加上反斜线 "\" 来表示常见的那些不能显示的ASCII字符.称为转义字符。如 \0, \t, \n 等。 转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将当前位置移到下一行开头 010 \r 回车(CR) ,将当前位置移到本行开头 013 \t 水平制表(HT) (跳到下一个TAB位置) 009 \v 垂直制表(VT) 011 \\ 代表一个反斜线字符 ''\' 092 \' 代表一个单引号(撇号)字符 039 \" 代表一个双引号字符 034 \0 空字符(NULL) 000 \ddd 1到3位八进制数所代表的任意字符 三位八进制 \xhh 1到2位十六进制所代表的任意字符 二位十六进制 2. 正则表达式 中的 特殊字符 在表达式中有特殊意义,需要在它前面添加 "\" 才能当作普通文本字符来使用。 使用正则表达式regex匹配特殊字符(2种方法记忆): 方法1:首先加"\"匹配该 特殊字符 本身,然后在 转义字符 (即"\")前加"\" 方法2:在特殊字符前加"\\"(或者使用[]),特别的"\"需要使用"\\\\"来匹配 字符 说明 input regex1 regex2 ^ 匹配输入字符串的

XAML 字符转义

廉价感情. 提交于 2020-02-12 18:26:40
在 写xaml的使用遇到了一些特殊字符,这里记录一下特殊字符转义。 这些特殊字符遵循用于编码的万维网联合会(W3C) XML 标准。 下表显示这组特殊字符的编码语法: 字符 语法 描述 < &lt; 小于符号。 > &gt; 大于符号。 & &amp; & 符号。 " &quot; 双引号。 参见: https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/advanced/how-to-use-special-characters-in-xaml 来源: https://www.cnblogs.com/azsunqi/archive/2020/02/12/12299888.html

正则中需要转义的特殊字符小结

↘锁芯ラ 提交于 2020-02-08 05:27:50
特别字符 说明 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。 * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。 + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。 . 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。 [ ] 标记一个中括号表达式的开始。要匹配 [,请使用 \[。 ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。 \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n' 匹配字符 ‘n'。'\n' 匹配换行符。序列 ‘\\' 匹配 “\”,而 ‘\(' 则匹配 “(”。 ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。 { } 标记限定符表达式的开始。要匹配 {,请使用 \{。 | 指明两项之间的一个选择。要匹配 |,请使用 \|。 所以是 复制代码 代码如下: * . ? + $ ^ [ ] ( ) { } | \ /

正则中需要转义的特殊字符

不问归期 提交于 2020-02-08 05:27:02
正则表达式中有一些特殊的字符需要转义,收集整理如下: 特殊字符 说明 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。 * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。 + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。 . 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \. [ ] 标记一个中括号表达式的开始。要匹配 [,请使用 \[。 ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。 \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n' 匹配字符‘n'。'\n' 匹配换行符。序列 ‘\\' 匹配 “\”,而 ‘\(' 则匹配 “(”。 ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。 { } 标记限定符表达式的开始。要匹配 {,请使用 \{。 | 指明两项之间的一个选择。要匹配 |,请使用 \|。 来源: https://www.cnblogs.com/liu

YAML

安稳与你 提交于 2020-02-05 21:41:51
YAML YAML是 “YAML Ain’t a Markup Language” (YAML不是一种置标语言)的递归缩写。 YAML语法 基础语法 k : (空格) v 表示 一对键值对(空格不能省略),以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。 注意:属性和值的大小写都是十分敏感的。 值的写法 字面量 字面量:普通的值【数字、布尔值、字符串】 k : v 字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号; “” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思; 比如 : name: “kuang \n shen” 输出 : kuang 换行 shen ‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出 比如 : name: ‘kuang \n shen’ 输出 : kuang \n shen 对象和Map(键值对) k : v1 : v2 : 数组(List、set) 用 - 值表示数组中的一个元素,比如: pets : - cat - dog - pig 来源: CSDN 作者: duanqwei 链接: https://blog.csdn.net/weixin_45394128/article/details/104180598

Java 特殊字符的split的分割

我只是一个虾纸丫 提交于 2020-02-04 11:23:41
Java 特殊字符的String.split的分割 特殊字符 分割的时候使用: 点 ( . ) :String . split ( "[.]" ) ; String . split ( "\\." ) ; 竖线 ( | ) :String . split ( "\\|" ) ; 星号 ( * ) :String . split ( "\\*" ) ; 斜杠(\):Sring . split ( "\\\\" ) ; 来源: CSDN 作者: ID_云泽 链接: https://blog.csdn.net/qq_38038472/article/details/103787280

Markdown 扩展语法-特殊字符

自古美人都是妖i 提交于 2020-01-31 11:51:57
特殊字符对应表 当Markdown中某些地方无法正常输出特殊字符时,可输入其对应的十进制字符编码(常见的情况,比如空格就不方便输出,此时可用   代替) 字符 十进制字符编号 实体名字 ! ! 惊叹号Exclamation mark ” " " 双引号Quotation mark # # 数字标志Number sign $ $ 美元标志Dollar sign % % 百分号Percent sign & & & Ampersand ‘ ' 单引号Apostrophe ( ( 小括号左边部分Left parenthesis ) ) 小括号右边部分Right parenthesis * * 星号Asterisk + + 加号Plus sign , , 逗号Comma – - 连字号Hyphen . . 句号Period (fullstop) / / 斜杠Solidus (slash) 0 0 数字0 Digit 0 1 1 数字1 Digit 1 2 2 数字2 Digit 2 3 3 数字3 Digit 3 4 4 数字4 Digit 4 5 5 数字5 Digit 5 6 6 数字6 Digit 6 7 7 数字7 Digit 7 8 8 数字8 Digit 8 9 9 数字9 Digit 9 : : 冒号Colon ; ; 分号Semicolon < < < 小于号Less

python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)

牧云@^-^@ 提交于 2020-01-30 13:33:08
问题描述 今天在写爬虫爬取影评时,本来的思路把影评的标题作为文件名,将每个影评的详情内容写入到“标题.txt”文件中,直到我遇到了这个问题: 这时我突然意识到,文件名中有些字符是不能存在的,怎么解决这些问题呢? 解决问题 首先想到的就是在创建文件时去除掉这些标题中的不能用的字符,机制的我赶紧去重命名了桌面上的一个文件,试图试验出那些字符,然后,机智的微软爸爸早已洞悉了一切, 也就是说文件名中不可以包含 / \ : * ? " < > | 这9个字符,因为考虑到直观性而且数据量不大,最简单的方法就是逐个过滤掉标题中的非法字符,即建立一个字典(这里的字典不是指python中的字典结构),对于每一个title都遍历一次,去除掉其中的非法字符,如下: def correct_title(self, title): error_set = ['/', '\\', ':', '*', '?', '"', '|', '<', '>'] for c in title: if c not in error_set: title.replace(c, '') return title 如此,就使用字符串的replace()达方法到了预期效果 总结 上述做法的主要目的是看着舒服,但实际上在使用和检索时效率不算高也不方便,具体如何做还是要看自己的需求来定 来源: https://www.cnblogs

正则表达式语法

馋奶兔 提交于 2020-01-28 19:22:52
非打印字符 非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列: 字符 描述 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于 \x0d 和 \cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于 \x09 和 \cI。 \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 特殊字符 所谓特殊字符,就是一些有特殊含义的字符,如上面说的 runoo*b 中的 * ,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 \ : runo\*ob 匹配 runo*ob。 许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符 \ 放在它们前面。下表列出了正则表达式中的特殊字符: 特别字符 描述 $