背景
写Latex的时候,从PDF或者网页上复制一些文本粘贴之后提示混有Unicode字符,因为文档没有引入Unicode适配包,所以报错。
如下面的一段文本,混有几个Unicode字符:
Consider the problem with input strings u_n u_{n−1} ... u_1 and v_m v_{m-1} ... v_1. Recall that the recursive calculation for computing the optimal eԁit is given by ƍ!
上面的文本中,u_n后面的空格,u_{n-1}的减号,末尾edit的"d"、"ƍ"和叹号,都是非ASCII字符。部分Unicode字符和一般的ASCII字符外观十分接近,难以辨别。
如何比较简单的找出字符串里的“叛徒”?
解决方法
利用VScode/Sublime Text/UE/notepad++/在线正则匹配网站等支持正则匹配的文本编辑工具,在搜索框输入下面的正则表达式(注意要开启正则匹配,一般是点亮搜索框右侧的一个" .* "图标),非ASCII字符就会高亮,并显示总计个数。
[^\u0020-\u007F]
补充
1. 上面表达式的含义是查找所有Unicode编码不在U+0020到U+007F之间的字符(即基本拉丁文字符编码范围)。
2. 如需根据情况允许标准控制字符,则区间应改为U+0000到U+007F。
3. 关于Unicode编码表:http://www.52unicode.com
4. 没有上述工具的时候,当然也可以手动利用二分法确定报错范围,不过手动查找的方法在只有一两个特殊字符的时候可用,Unicode字符很多时不建议用太麻烦。
关键词
正则 Unicode Latex 混合 非ASCII字符
网友评论