題 如何在記事本++ط(\ uFEC1和僅該字符)中找到此字符(通過unicode搜索)


如何在notepad ++ط中找到此字符(通過unicode搜索)

如果我去charmap

我選這個角色

我在unicode搜索框中鍵入FEC1並按Enter鍵,它會找到該字符

enter image description here

我在fileformat.info上查找

http://www.fileformat.info/info/unicode/char/fec1/index.htm

UTF-8 (hex)   0xEF 0xBB 0x81 (efbb81)
UTF-16 (hex)  0xFEC1 (fec1)

如果我按字面意思將字符輸入搜索框,那麼它就會找到它

enter image description here

但我無法看到要搜索的unicode

我希望能夠在UTF-8和UTF-16中搜索它

[\ uFEC1]似乎找到了這個角色,但它找到的不僅僅是那個角色

現在,如果我在那里扔幾個FEC9,那麼我看到[\ uFEC1]似乎也找到了它們

enter image description here

那麼,我如何搜索\ uFEC1並且只搜索那個。而且我也有興趣通過它的UTF-8代碼來搜索它


4
2017-10-12 13:29


起源


投票結束的任何人都應該給出理由。這個問題不僅要求UTF 16,還要求UTF 8。 - barlop
這個問題沒有任何意義:你可以輕鬆搜索\ x {FEC1} - duDE
對於UTF-16 \ x {FEC1}已在現在刪除的答案中指出。 (並授予一個可以使用UTF16)。但問題仍然存在,但我問的是UTF8。 - barlop
這適用於UTF-8,只需試一試! - duDE
@duDE我說的是使用UTF-8指定代碼。我知道即使文件以UTF-8存儲,您也可以用UTF-16指定代碼。看看UTF-8代碼,看看我的問題。我希望能夠指定使用該代碼。 UTF-8(十六進制)0xEF 0xBB 0x81(efbb81)這就是為什麼我的問題的最後一行說“我也有興趣通過它的UTF-8代碼搜索它”搜索BY ITS utf-8代碼 - barlop


答案:


要使用UTF-16按Unicode代碼點搜索,請使用(\x{FEC1}),無論文件是用UTF-8還是UTF-16編碼,它都有效。

請記住,您不需要使用UTF-8代碼進行搜索,因為您可以使用UTF-16代碼進行搜索。但是要解決你的問題部分,詢問你如何通過UTF-8代碼搜索該字符...

你不能。 嗯,你有點可以,但它是一個 可怕 黑客和你 真的不應該

嘗試的顯而易見的事情是搜索 \xef\xbb\x81 在您的UTF-8編碼文檔中,但這不起作用。 (注意沒有 {} 這裡:Notepad ++要求 \xNN 對於2個十六進制數字,或 \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(它不需要是正則表達式,只是一個“擴展”搜索),它會找到字符。 有點。 看起來它會突出顯示兩個角色 ï»,但它真的很突出  特點: ï»,和一個“看不見的” 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 意思是“大寫字母”。 (請記住,在正則表達式中,括號代表“任何這些字符”)。文檔進一步說,“請參閱關於小寫字母[sic]字母的註釋”,並且關於小寫字母的註釋說“如果”匹配案例“搜索選項關閉,則”這將“回到”單詞字符“。就像在截圖中一樣。因此,正則表達式 [\uFEC1] 正在搜索“任何單詞字符,或F,或E,或C,或1” - 它匹配示例文本中的每個字符。

Phew,對我所說的“非常簡單”來說,這是一個很長的答案。我希望這可以幫助你更好地理解Unicode;如果是這樣的話,那我打字的時間就是值得的。


10
2017-10-13 14:29





看一看: 任何人都知道如何在記事本++中使用正則表達式來查找阿拉伯字符?

因為Notepad ++的正則表達式的實現要求你使用

\x{NNNN}

用於匹配Unicode字符的表示法。

enter image description here

在你的例子中,

\x{FEC1} 

3
2017-10-12 13:54



謝謝,這適用於UTF 16.你知道你是否可以使用UTF-8代碼進行搜索(這是我q的另一部分)? - barlop
我沒有問你它是否有效或不適用於你的系統。 Notepad ++是Notepad ++,所以任何東西都可以工作或不適用於我們兩個人。我問你的問題(也是我的問題)是你能用UTF 8代碼搜索那個角色,那就是 UTF-8 (hex) 0xEF 0xBB 0x81 (efbb81) - barlop
-1我不得不低估你沒有理解這一點,甚至不理解你沒有理解問題的後半部分。我已經非常清楚我也在詢問UTF-8,你甚至沒有理解或做任何努力甚至看不到你的理解。不理解某事是一回事,並且要問,不理解它是另一回事,並且完全忘記不理解它。你堅持要求你回答我的問題,但是我告訴過你,它有兩個部分而且你沒有回答下半部分(儘管你堅持要有)。 - barlop
我不關心你的貶低 - 我只是想幫助你! - duDE
[如果你回答(你做了)那麼你應該試著回答這個問題 - 老實說。 - barlop