bar*_*lop 8 notepad++ unicode character-encoding find-and-replace
我如何在记事本++中找到这个字符(通过unicode搜索)?
如果我去charmap
我选择这个角色
我在 unicode 搜索框中输入 FEC1 并按 ENTER 并找到该字符
我在 fileformat.info 上查找
http://www.fileformat.info/info/unicode/char/fec1/index.htm
Run Code Online (Sandbox Code Playgroud)UTF-8 (hex) 0xEF 0xBB 0x81 (efbb81) UTF-16 (hex) 0xFEC1 (fec1)
如果我按字面意思在搜索框中输入字符,那么它会找到它
但我看不到要搜索什么 unicode 才能找到它
我希望能够在 UTF-8 和 UTF-16 中搜索它
[\uFEC1] 似乎找到了字符,但它找到的不仅仅是那个字符
现在,如果我在那里扔几个 FEC9,那么我看到 [\uFEC1] 似乎也找到了它们
那么,我如何搜索 \uFEC1 并且仅此而已。我也有兴趣通过它的 UTF-8 代码搜索它
rmu*_*unn 18
要使用 UTF-16 按 Unicode 代码点进行搜索,您可以使用 ( \x{FEC1}),无论文件是使用 UTF-8 还是 UTF-16 编码,它都有效。
请记住,您不需要按 UTF-8 代码进行搜索,因为您可以按 UTF-16 代码进行搜索。但是要解决您的问题中询问如何通过 UTF-8 代码搜索该字符的部分...
你不能。嗯,你有点可以,但这是一个可怕的黑客,你真的不应该。
显而易见的尝试是\xef\xbb\x81在您的 UTF-8 编码文档中搜索,但这不起作用。(注意这里没有{}:Notepad++ 需要\xNN2 个十六进制数字或\x{NNNN}4 个十六进制数字)。那是因为 Notepad++ 实际上并不搜索字节值,而是搜索 Unicode 代码点。因此,您可以搜索代码点 U+FEC1,但不能搜索 UTF-8 字节 0xEF 0xBB 0x81,因为 Notepad++“隐藏”了您的编码细节。(因为几乎在所有情况下,编辑文本文件的人会更关心查找实际字符而不是查找 UTF-8 字节。)
您可以尝试另一种技巧,即获取该 UTF-8 编码文件并选择Encoding ? Encode in ANSI菜单选项,此时???????似乎变为ï»ï»ï»‰ï»ï»‰ï»ï»‰. (我说“似乎成为”而不是“成为”是因为……好吧,请继续阅读。)这是因为它采用了文件的 UTF-8 文本,并将其重新解释为“ANSI”(这是一个可怕的编码名称,因为它完全错误,应该真正称为“Windows-1252”,但这是一个不同的问题)。(顺便说一句,确实关心以正确的从右到左的顺序显示阿拉伯语的原因,该字符串的前两个字母(???????在我的文本看起来比在屏幕截图中的方式向后:那是因为 Notepad++ 不关心阿拉伯语是从右到左书写的,??) 出现在字符串的右侧,而不是像 Notepad++ 中那样出现在左侧)。除了题外话,这就是为什么这会有所帮助。在“ANSI”(真正的 Windows-1252)编码中,每个字节都是一个字符,因此现在您将能够按单个字节进行搜索。现在,如果您搜索\xef\xbb\x81(不需要是正则表达式,只需“扩展”搜索),它将找到字符。有点。它看起来像它突出了两个字符ï»,但它确实突出3个字符:ï,»,和“看不见”的0x81字符实际上并不存在。0x81指向 Windows-1252 编码:你自己看看。)现在你明白我为什么说“似乎变成了”——因为你的 UTF-8 编码文本真的变成了ï»_ï»_ﻉï»_ﻉï»_ﻉ,其中_代表一个不正式存在的“隐形”字符在 Windows-1252 代码页中。无论如何,既然您已经在 Windows-1252 中找到了字节值为 0xEF、0xBB 和 0x81 的三个字符的序列,并且 Notepad++ 已突出显示它们,您可以选择Encoding ? Encode in UTF-8菜单选项,您的文本将自身转换回 UTF -8,而 Notepad++ 会将高亮显示在同一位置——因此,您会发现一个?字符已被高亮显示。
那我为什么说你真的不应该这样做呢?因为它起作用的唯一原因是 Notepad++在您切换代码页时没有做正确的事情。正确的事情,当你找到丢失的字符是抱怨,或像插入Unicode替换字符的字符做?(或一个简单的?,如果你在没有遗留代码页是?在它),或做一些使用户会知道他们的文本中有无效字符。错误应该永远不会被忽略,并且具有0x81在Windows 1252的文本值是一个错误. 这个技巧起作用的唯一原因是 Notepad++ 对无效字符做了错误的处理(也就是说,它忽略了它们)。所以你真的不应该依赖这个技巧:随着 Notepad++ 的任何更新,它可能会改变其未记录的(和错误的)行为,并开始在错误编码的文本中放置正确的替换字符,此时这个技巧将失败。坚持搜索真正的 Unicode 代码点,你会过得更好。
顺便说一下,您最初的尝试 ( [\uFEC1]) 失败的原因是,根据Notepad++ 的正则表达式语法,\u意思是“大写字母”。(请记住,在正则表达式中,方括号表示“这些字符中的任何一个”)。文档进一步说,“请参阅关于小写 [原文如此] 字母的注释”,关于小写字母的注释说“如果“匹配大小写”搜索选项关闭,这将退回到“单词字符”。就像你的截图一样。因此,正则表达式[\uFEC1]正在搜索“任何单词字符,或 F、E、C 或 1”——它匹配示例文本中的每个字符。
呼,结果证明这是一个很长的答案,因为我所说的“非常简单”。我希望这能帮助你更好地理解 Unicode;如果是这样,我花在打字上的时间将是值得的。
看一看:有人知道如何在记事本++中使用正则表达式来查找阿拉伯字符吗?
因为 Notepad++ 的正则表达式实现要求您使用
\x{NNNN}
Run Code Online (Sandbox Code Playgroud)
表示法来匹配 Unicode 字符。
在你的例子中,
\x{FEC1}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51738 次 |
| 最近记录: |