如何使用Go去除給定的UTF8編碼字符串中的所有變音符號?例如轉換字符串"žůžo"
=>"zuzo"
。有沒有標準的方法?使用Go去除變音符號
8
A
回答
15
您可以使用Text normalization in Go中描述的庫。
這裏的這些庫的應用程序:
// Example derived from: http://blog.golang.org/normalization
package main
import (
"fmt"
"unicode"
"golang.org/x/text/transform"
"golang.org/x/text/unicode/norm"
)
func isMn(r rune) bool {
return unicode.Is(unicode.Mn, r) // Mn: nonspacing marks
}
func main() {
t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC)
result, _, _ := transform.String(t, "žůžo")
fmt.Println(result)
}
0
要擴大現有的答案了一下:
比較不同字符的字符串互聯網標準規定被稱爲「PRECIS」(準備,執行以及應用程序協議中國際化字符串的比較),並記錄在RFC7564中。在golang.org/x/text/secure/precis也有一個Go執行。
沒有一個標準配置文件可以做你想做的事情,但是定義一個新的配置文件是相當直接的。你會希望將Unicode規範化表單D(「D」用於「分解」,這意味着重音將被拆分併成爲它們自己的組合字符),然後刪除任何組合字符作爲附加映射規則的一部分,然後重新組合與規範化規則。事情是這樣的:
package main
import (
"fmt"
"unicode"
"golang.org/x/text/secure/precis"
"golang.org/x/text/transform"
"golang.org/x/text/unicode/norm"
)
func main() {
loosecompare := precis.NewIdentifier(
precis.AdditionalMapping(func() transform.Transformer {
return transform.Chain(norm.NFD, transform.RemoveFunc(func(r rune) bool {
return unicode.Is(unicode.Mn, r)
}))
}),
precis.Norm(norm.NFC), // This is the default; be explicit though.
)
p, _ := loosecompare.String("žůžo")
fmt.Println(p, loosecompare.Compare("žůžo", "zuzo"))
// Prints "zuzo true"
}
這讓你後來擴大與更多的選擇你的比較(例如寬度映射,案例映射等)。
另外值得一提的是,除去口音幾乎從未真正你在比較像這樣的字符串時想做的事情,但是,不知道你的用例,我實際上不能對你的項目做出斷言。爲了防止精簡配置文件的擴散,儘可能使用現有配置文件之一。還請注意,沒有努力優化示例配置文件。
相關問題
- 1. 音譯符號去除
- 2. 用變音符號
- 3. 使用Solr處理變音符號和重音符號
- 4. 如何從字符串中刪除變音符號(變音符號)?
- 5. 變音符號
- 6. 刪除變音符號不工作
- 7. PHP str_getcsv刪除變音符號
- 8. javascript函數刪除變音符號
- 9. 在Scala中刪除變音符號
- 10. 防止htmlpurifier移除變音符號
- 11. 刪除阿拉伯語變音符號
- 12. 如何從XSL中的字符中去除重音符號?
- 13. AFNetworking變音符號
- 14. JDOM使用變音符號解析XML
- 15. 在網址中使用變音符號
- 16. 如何使用mPDF和變音符號?
- 17. 使用變音符號讀取POI
- 18. 從字符串中刪除變音符號(重音符號)。幫我解決
- 19. 外文字符失去了變音符號
- 20. 使用VI去除冒號
- 21. Int.ToString(「C」)去除負符號
- 22. 簡化字符串的通用方法,刪除變音符號
- 23. Jmeter中的變音符號和符號
- 24. 使用Lucene 4.8去除噪音
- 25. 帶變音符號的RenderPage()
- 26. python中的變音符號
- 27. git和變音符號
- 28. python:lower()德語變音符號
- 29. ASP.NET和變音符號
- 30. C++ ifstream和「變音符號」
這很棒 - 知道go.text有一些更好的工具來處理Unicode,但沒有看到像這樣的實際用法。看起來我錯過了博客中的一些實用的東西。 :P – twotwotwo 2014-11-04 06:36:42
這隻適用於有unicode分解的字符。例如,字符Ł(帶筆劃的L)不會改變(所以「AŁA」將轉換爲「AŁA」),儘管直觀上它應該被轉換爲「L」(所以「AŁA」=>「ALA」)。 – 2016-07-21 07:49:26