Z MSDN: http://msdn.microsoft.com/en-us/library/... ASCIIEncoding corresponds to the Windows code page 20127. Because ASCII is a 7-bit encoding, ASCII characters are limited to the lowest 128 Unicode characters, from U+0000 to U+007F. If you use the default encoder returned by the Encoding.ASCII property or the ASCIIEncoding constructor, characters outside that range are replaced with a question mark (?) before the encoding operation is performed. Because the ASCIIEncoding class supports only a limited character set, the UTF8Encoding, UnicodeEncoding, and UTF32Encoding classes are better suited for globalized applications. Jinými slovy, ASCII kódování zahrnuje pouze omezenou znakovou sadu (o 127 znacích), do které se diakritika nevejde. Na Wikipedii http://en.wikipedia.org/wiki/ASCII je přehledná tabulka všech znaků, které se do ASCII vejdou. Pokud se v textu k zakódování vyskytne znak, který nespadá do sady od U+0000 do U+007F, nahradí se ve výstupu zástupným symbolem - otazníkem. Pokud je přijatelné řešení nahradit ve výstupu diakritiku znaky z ASCII (á na a, ř na r), pak se můžete inspirovat kódem Michala Valáška zde: http://www.aspnet.cz/articles/92-jak-spo...
Imports System.Globalization
Public Shared Function RemoveDiacritics(s As String) As String
s = s.Normalize(NormalizationForm.FormD)
Dim sb As New StringBuilder()
For i As Integer = 0 To s.Length - 1
If CharUnicodeInfo.GetUnicodeCategory(s(i)) <> UnicodeCategory.NonSpacingMark Then
sb.Append(s(i))
End If
Next
Return sb.ToString()
End Function
|