2016-04-27 127 views
1

我想在上傳時驗證文件的內容,並且堅持使用Unicode編碼。我不想找到Unicode特殊字符,它們不在ASCII範圍內。我正在嘗試查找文件的內容是否至少包含一個Unicode模式,例如\ u0046。用於匹配Unicode模式的正則表達式

例如,我排除了包含'腳本'單詞的任何文件,但如果文件包含以Unicode編寫的單詞,該怎麼辦?當然,當Java讀取內容時,Java將它解碼爲一個普通的字符串,但如果我不能依賴這個呢?因此,據我在互聯網上搜索,我已經看到了像\ u0046,或像U + 0046寫的Unicode字符。基於此,我寫了以下正則表達式:

(\\u|U\+).... 

這意味着\ u或U +後跟四個字符。這種模式實現了我的願望,但我想知道是否有其他方法來編寫Unicode字符。它總是\ u或U +? \ u或U +後可以多於或少於4個字符?

由於

+0

不知道你想達到什麼。例如,還有一些XML字符像「 」這樣的轉義字符以及其他無數轉義字符的方法。 – Henry

+0

我必須在字符串中搜索Unicode字符,而不是Unicode代碼的含義。例如,U + 0061是「a」字母,但我不想匹配字母本身,而是匹配Unicode序列(代碼)的外觀。所以,如果在文件內容中出現像U + 0061或\ u0061這樣的序列,我必須阻止該文件。所以我想知道我是否可以爲此創建一個模式。 –

+0

回去一步。危險很大程度上取決於文件的類型(即以後如何使用),而非實際內容。例如U + 0046在大多數情況下都是無害的。因此,您希望通過此驗證達到什麼目的很有意思。你檢查哪些文件,... – Henry

回答

2

任何-數的 - 己數字屬於爲Unicode的符號U + 將不起作用在代碼的任何地方。在java源代碼和* .properties \u後跟四個十六進制數字是Unicode的UTF-16編碼,自動解析。

來搜索的模式:

"\\\\u[0-9A-Fa-f]{4}" 

還是一個String.contains上:

"\\u" 

在除Java \Uxxxxxx其他語言(六個內六角字符)是可能的,完整的UTF -32範圍。不幸的是,Java 8並非如此。

+0

如何編寫正則表達式來匹配像這樣的模式?ude08yo? '喲'是字連接到unicode'\ ude08',我需要一種方法來分開他們,任何想法? –