我有一个巨大的文件夹,里面装满了xml文件,其中一些文件可能会破坏,因为它们包含那些卷曲的引号,即Microsoft Word引号,即智能引号。我只是想快速检查一下,看看我遇到了什么。有人知道如何为他们打招呼,这样我就能很容易找到罪犯吗?
修改
这是一个简化的例子。
<?xml version="1.0" encoding="UTF-8"?>
<items>
<item>Pretend this is a curly quote: '</item>
</items>
答案 0 :(得分:5)
Curly引号具有以下Unicode代码点和UTF-8序列:
Name CodePoint UTF-8 sequence ---- --------- -------------- LEFT SINGLE QUOTATION MARK U+2018 0xE2 0x80 0x98 RIGHT SINGLE QUOTATION MARK U+2019 0xE2 0x80 0x99 SINGLE LOW-9 QUOTATION MARK U+201A 0xE2 0x80 0x9A SINGLE HIGH-REVERSED-9 QUOTATION MARK U+201B 0xE2 0x80 0x9B LEFT DOUBLE QUOTATION MARK U+201C 0xE2 0x80 0x9C RIGHT DOUBLE QUOTATION MARK U+201D 0xE2 0x80 0x9D DOUBLE LOW-9 QUOTATION MARK U+201E 0xE2 0x80 0x9E DOUBLE HIGH-REVERSED-9 QUOTATION MARK U+201F 0xE2 0x80 0x9F
XML通常以UTF-8存储,因此您可以直接比较字节序列。
答案 1 :(得分:4)
你可以找到包含这样提到的UTF-8序列的文件:
grep -r -P "\xE2\x80\x9C" .
-r
使其递归,-P
告诉grep使用Perl兼容的正则表达式。
答案 2 :(得分:0)
如果它们是xml文档,您可以打开其中一个包含有问题引号的文档,以查看它们在xml文件中的确切含义(并将它们复制到剪贴板,如果您无法轻松复制它们用你的键盘。)
假设您的引号看起来像„
或”
,您可以执行sed -i .bak 's/[”„]/"/' file1 file2 ...
(如果在Windows上使用Linux / OSX / cygwin)以快速替换违规引号引号,就地修改文件。
答案 3 :(得分:0)
可能是重复的
我有一种情况,用户会从任何地方复制粘贴字符串,我不得不允许他们输入一个除了引号之外的任何特殊字符的条目。对于这件事,行情是聪明/花哨/直接的。让我举例说明:
Text | Error
----------------
O*Connor| Yes
O'Connor| No
O’Connor| No
我为我的CF代码提出了以下解决方案。
<cfif #REFind("[[:punct:],[:digit:]]",textName)# GT 0 >
<cfset temp_name = textName.ReplaceAll(JavaCast( "string", "[^A-Za-z\u2018\u2019\u201A\u201B\u2032\u2035\'\-\ ]" ),JavaCast( "string", "" )) >
<cfif (len(temp_name )EQ len(textName)) >
<!--- If you find single quote or hyphen, do nothing --->
<cfelse>
<cfset errormsg = The Text contains special charctaer">
</cfif>
的巨大帮助
答案 4 :(得分:0)
我在Mac上,内置的grep不能立即为我工作(neubert的答案。)我最终安装了Homebrew的GNU grep版本:
brew tap homebrew/dupes
brew install homebrew/dupes/grep
然后我可以以类似的方式运行命令:
ggrep -r -P "\xE2\x80\x9C" .
etc.
我最终将dalle和neubert的答案合并到this script,这将运行我目前所知的所有案例并将其全部打印出来。