Normalize All UTF8 Character into it's most standard format

做~自己de王妃 提交于 2020-01-30 06:33:26

问题


I used this code:

Public Function RemoveDiacritics(ByVal s As String) As String
    Dim normalizedString As String
    Dim stringBuilder As New StringBuilder
    normalizedString = s.Normalize(NormalizationForm.FormKD)
    Dim i As Integer
    Dim c As Char
    For i = 0 To normalizedString.Length - 1
        c = normalizedString(i)
        If CharUnicodeInfo.GetUnicodeCategory(c) <> UnicodeCategory.NonSpacingMark Then
            stringBuilder.Append(c)
        End If
    Next
    Return stringBuilder.ToString()
End Function

This awesome function work MOST of the time (I forget where I copy it and have modified it a little bit, if you wrote that please let me know so I can credit).

Out of 500k words the following still flow through this filter:

٥ (4)  <------->  5 (20321)
​​​ (4)  <------->  ​ (97)
つ (4)  <------->  ツ (17)
≈ (1)  <------->  ​≈ (1)
​◦☃β (1)  <------->  ◦☃β (2)
​☀ (1)  <------->  ☀ (14)
​​​☆ (1)  <------->  ☆ (32)
​​​​​​★☆ (1)  <------->  ★☆ (6)
​​​​☺ (2)  <------->  ☺ (266)
​☺ (5)  <------->  ☺ (266)
​♏ (3)  <------->  ♏ (19)
♚​ (2)  <------->  ♚ (33)
♚​​​​​ (1)  <------->  ♚ (33)
​​​​♧ (1)  <------->  ♧ (2)
​✽ (1)  <------->  ✽ (26)
١٥ (1)  <------->  15 (8862)
☺​ (1)  <------->  ☺ (266)
➎ (1)  <------->  5 (20321)
٥٠ (1)  <------->  50 (4155)
๙ (2)  <------->  9 (13777)
​© (1)  <------->  © (173)
​ (4)  <------->   (50)
​​© (1)  <------->  © (173)
⌣​ (1)  <------->  ⌣ (120)
oe (7)  <------->  œ (7)
​​β (1)  <------->  β (19)
​​☺ (2)  <------->  ☺ (266)
​з (1)  <------->  з (16)
​​ (17)  <------->  ​ (97)
丸ノ内店 (2)  <------->  丸の内店 (3)
❷ (1)  <------->  2 (40100)
ˆ⌣ˆ​​​​ (3)  <------->  ˆ⌣ˆ (45)
βενιζελου (1)  <------->  βενίζελου (45)
​ƪ (5)  <------->  ƪ (84)
​​​​ (3)  <------->  ​ (97)
❹❻ (1)  <------->  46 (2856)
​:þ (1)  <------->  :þ (3)
ラーメン (19)  <------->  らーめん (27)
​​​​​ (1)  <------->  ​ (97)
٩ (3)  <------->  9 (13777)
۶ (3)  <------->  6 (16464)
​♥ (4)  <------->  ♥ (18)
​’ (1)  <------->  ’ (146344)
•ˆ⌣ˆ• (7)  <------->  •ˆ⌣ˆ​​​​• (7)
つ (4)  <------->  っ (6)
​​​> (1)  <------->  > (160)
​​♌ (2)  <------->  ♌ (8)
登美ヶ丘店 (1)  <------->  登美ケ丘店 (1)
​ (2)  <------->   (3)
​” (5)  <------->  ” (4389)
⌣»··✽​ (1)  <------->  ⌣»··✽ (2)
​​​​​​​ (1)  <------->  ​ (97)
トラへラント (1)  <------->  トラヘラント (3)
☆​ (1)  <------->  ☆ (32)
ԅ҈ (1)  <------->  ԅ (3)
√ (1)  <------->  ​√ (1)
ί (4)  <------->  ι (15)
​° (2)  <------->  ° (183)
​​° (1)  <------->  ° (183)
γαλατσι (1)  <------->  γαλατσί (2)
 (2)  <------->  ​ (97)
πατησιων (2)  <------->  πατησίων (12)
​​☎ (1)  <------->  ☎ (18)
ッ (1)  <------->  つ (4)
​┌п┐​ (1)  <------->  ┌п┐ (2)
​◦’⌣’◦ (1)  <------->  ◦’⌣’◦ (15)
➋ (7)  <------->  2 (40100)
ノ (4)  <------->  の (7)
えひすヒル (1)  <------->  エヒスヒル (1)
“​​ (1)  <------->  “ (5962)
​​ƪ (3)  <------->  ƪ (84)
​ツ (1)  <------->  つ (4)
​> (1)  <------->  > (160)
​​ː (1)  <------->  ​ː (1)
​ː (1)  <------->  ː (2)
@​​ (1)  <------->  @ (11656)
‹ (1)  <------->  ​‹ (1)
〇 (1)  <------->  0 (431)
я۝ (1)  <------->  я (74)
新百合ケ丘店 (2)  <------->  新百合ヶ丘店 (4)
ψυχικο (1)  <------->  ψυχίκο (1)
•​”• (2)  <------->  •”• (4)
​◦ˆ▽ˆ◦ (1)  <------->  ◦ˆ▽ˆ◦ (1)
┏ (1)  <------->  ​┏ (1)
​​​ʀ (2)  <------->  ʀ (20)
​​​​​​ (1)  <------->  ​ (97)
​امين (1)  <------->  امين (2)
١٥٧٤ (1)  <------->  1574 (16)
➌ (1)  <------->  3 (27369)
ʃ​ (1)  <------->  ʃ (70)
๑ (2)  <------->  1 (57313)
εγνατια (2)  <------->  εγνατία (2)
​☎ (1)  <------->  ☎ (18)
ƾ (1)  <------->  ts (63)
‬ (1)  <------->  ​ (97)
ƍ (2)  <------->  zw (2)
κειριαδων (1)  <------->  κείρίαδων (1)
ακταιον (1)  <------->  ακταίον (2)
αστερια (1)  <------->  αστερία (4)
αστυνομικο (1)  <------->  αστυνομίκο (3)
αττικον (1)  <------->  αττίκον (1)
αφοι (1)  <------->  αφοί (6)
φιλιασ (1)  <------->  φίλίασ (3)
γευστικον (1)  <------->  γευστίκον (2)
δικαστικο (1)  <------->  δίκαστίκο (1)
χαιδαριου (1)  <------->  χαίδαρίου (1)
θεσνίκησ (1)  <------->  θεσνικησ (1)
εκδοσεισ (1)  <------->  εκδοσείσ (1)
σια (1)  <------->  σία (3)
εστια (1)  <------->  εστία (3)
μηχανικων (1)  <------->  μηχανίκων (5)
ηλιοσ (1)  <------->  ηλίοσ (2)
αγιου (1)  <------->  αγίου (32)
γεωργιου (2)  <------->  γεωργίου (18)
ελευθεριο (1)  <------->  ελευθερίο (5)
επιπλα (1)  <------->  επίπλα (2)
ίεροσ (1)  <------->  ιεροσ (9)
σταδιου (1)  <------->  σταδίου (5)
μεραρχιασ (1)  <------->  μεραρχίασ (2)
εκπαιδευσησ (1)  <------->  εκπαίδευσησ (3)
θεσσαλονικησ (1)  <------->  θεσσαλονίκησ (13)
λαμιασ (1)  <------->  λαμίασ (4)
κτίρίο (1)  <------->  κτιριο (1)
ατει (1)  <------->  ατεί (1)
κωνσταντινιδησ (1)  <------->  κωνσταντίνίδησ (1)
μεσογειων (1)  <------->  μεσογείων (15)
λαικη (1)  <------->  λαίκη (6)
χωριου (1)  <------->  χωρίου (2)
πλατεια (2)  <------->  πλατεία (113)
πολυτεχνειου (1)  <------->  πολυτεχνείου (13)
ναυτικοσ (1)  <------->  ναυτίκοσ (3)
ομιλοσ (1)  <------->  ομίλοσ (7)
νικοσ (1)  <------->  νίκοσ (2)
σίδ (1)  <------->  σιδ (1)
παιδικη (1)  <------->  παίδίκη (11)
παπαγίαννη (1)  <------->  παπαγιαννη (1)
παραδοσίακη (1)  <------->  παραδοσιακη (1)
τρίων (1)  <------->  τριων (1)
κομμωτηριο (1)  <------->  κομμωτηρίο (8)
σπιτακι (1)  <------->  σπίτακί (4)
σπιτι (2)  <------->  σπίτί (16)
φιλων (1)  <------->  φίλων (3)
για (1)  <------->  γία (2)
ταμείο (1)  <------->  ταμειο (1)
τζακί (1)  <------->  τζακι (1)
ηπειρου (1)  <------->  ηπείρου (3)
καραγιωργη (1)  <------->  καραγίωργη (1)
χωριατικο (1)  <------->  χωρίατίκο (1)
​السلام (1)  <------->  السلام (3)
٢ (1)  <------->  2 (40100)
٣٠٣ (1)  <------->  303 (406)
٥٦ (2)  <------->  56 (2242)
٢١ (1)  <------->  21 (8533)
٤ (1)  <------->  4 (19623)
١٩٥ (1)  <------->  195 (308)
٥٥١ (1)  <------->  551 (99)
٩٠ (1)  <------->  90 (1296)
٣ (1)  <------->  3 (27369)
๑๑ (1)  <------->  11 (11482)
๖ (1)  <------->  6 (16464)
๕๐ (1)  <------->  50 (4155)
๒๗ (1)  <------->  27 (4895)
๘๕ (1)  <------->  85 (1249)
๒ (2)  <------->  2 (40100)
๓ (2)  <------->  3 (27369)
ああ博多人情 (1)  <------->  あぁ博多人情 (1)
アタシンチ (1)  <------->  アタシんち (1)
アタン (1)  <------->  あたん (1)
ト (5)  <------->  と (5)
ヒッツエリア (1)  <------->  ヒッツェリア (3)
イオンモール奈良登美ケ丘 (1)  <------->  イオンモール奈良登美ヶ丘 (2)
イスミヤ (1)  <------->  いすみや (1)
ウインターラント (1)  <------->  ウィンターラント (2)
ウエルシア (1)  <------->  ウェルシア (2)
エヒス (1)  <------->  えひす (1)
サクラ (1)  <------->  さくら (2)
さんくす (1)  <------->  サンクス (50)
百合ヶ丘 (1)  <------->  百合ケ丘 (1)
シェル (1)  <------->  シエル (1)
茅ケ崎店 (2)  <------->  茅ヶ崎店 (4)
堀の内 (2)  <------->  堀ノ内 (6)
たいわ (1)  <------->  タイワ (1)
ツタヤ (1)  <------->  つたや (1)
トラック (1)  <------->  とらっく (3)
なないろ (1)  <------->  ナナイロ (1)
新百合ヶ丘 (2)  <------->  新百合ケ丘 (3)
ひすとろ (1)  <------->  ヒストロ (6)
富ケ谷 (1)  <------->  富ヶ谷 (3)
御幸ヶ原町 (1)  <------->  御幸ケ原町 (2)
ホンハトゥル (1)  <------->  ホンハトウル (2)
マルシケ (1)  <------->  まるしけ (1)
マルヤ (1)  <------->  まるや (2)
つるや (1)  <------->  ツルヤ (2)
くりえいと (2)  <------->  クリエイト (7)
ゆう (1)  <------->  ユウ (1)
ハン (1)  <------->  はん (1)
ふぅ (1)  <------->  ふう (2)
らーめん専門店 (1)  <------->  ラーメン専門店 (2)
あんと (1)  <------->  アント (1)
らいふ (1)  <------->  ライフ (5)
能ケ谷 (1)  <------->  能ヶ谷 (2)
新百合ケ丘エルミロート店 (1)  <------->  新百合ヶ丘エルミロート店 (3)
れすとらん (1)  <------->  レストラン (15)
中華ソハ (1)  <------->  中華そは (10)
串かつ (2)  <------->  串カツ (3)
九州らーめん (1)  <------->  九州ラーメン (1)
シン (1)  <------->  しん (1)
八ケ崎 (1)  <------->  八ヶ崎 (4)
まつもと (1)  <------->  マツモト (1)
向ケ丘遊園駅 (1)  <------->  向ヶ丘遊園駅 (1)
月見ヶ丘 (2)  <------->  月見ケ丘 (3)
日ノ出町 (1)  <------->  日の出町 (1)
幡ケ谷 (1)  <------->  幡ヶ谷 (7)
江ノ島店 (1)  <------->  江の島店 (1)
さくらラウンシ (1)  <------->  サクララウンシ (3)
大イチョウ (1)  <------->  大いちょう (1)
イチョウ (1)  <------->  いちょう (1)
さとう (1)  <------->  サトウ (2)
いちょう並木 (1)  <------->  イチョウ並木 (1)
横浜らーめん (1)  <------->  横浜ラーメン (1)
サスケ (1)  <------->  さすけ (1)
馬見ケ崎 (1)  <------->  馬見ヶ崎 (2)
サカイ (1)  <------->  さかい (2)
保土ケ谷区天王町 (1)  <------->  保土ヶ谷区天王町 (1)
樋ノ口 (1)  <------->  樋の口 (2)
ミンミン (1)  <------->  みんみん (2)
関ケ島 (1)  <------->  関ヶ島 (1)
ふらいむ (1)  <------->  フライム (1)
チョコリ (1)  <------->  ちょこり (1)
やまと (1)  <------->  ヤマト (2)
すわん (1)  <------->  スワン (1)
中ムラ (1)  <------->  中むら (1)

I want to ensure this don't flow through. Say I want to convert all ム to む


回答1:


There's a couple resources that might be useful to you. You can find them here, and here. The first is a possible duplicate question with a few more functions that might help you figure out your problem. The second is an article that I stumbled upon while Googling your question. It turned out to be an excellent read.

Something more practical was this:

Public Function RemoveAccentMarks(ByVal s As String) As String
   Dim stringBuilder As New StringBuilder
   Dim c As Char
   For Each c In s
       Dim v As Char = Chr(Asc(c) And &H7F)
       stringBuilder.Append(v)
   Next

   Return stringBuilder.ToString
End Function

(Source - you'll need to scroll to the bottom, it was Bob Strunz who claimed that it worked for him!)

Hope that helps, I rather enjoyed this question (upvote). It was fun, informative, and interesting!

-sf



来源:https://stackoverflow.com/questions/11354999/normalize-all-utf8-character-into-its-most-standard-format

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!