This is a rather difficult task, so no method will be really very elegant.
, , , . , , ( , , ).
, , .Replace , char.ConvertFromUtf32(8211) "\u2013". , , , U + 2013, (, char.ConvertFromUtf32(0x2013) , char). ( '–' - , , , -, - - ).
( , , , char char).
, :
formattedString = formattedString.Replace('\u2013', '-');
formattedString = formattedString.Replace('\u2014', '-');
formattedString = formattedString.Replace('\u2015', '-');
3, , , , ( , , formattedString , ). :
StringBuilder sb = new StringBuilder(formattedString.length);
foreach(char c in formattedString)
switch(c)
{
case '\u2013': case '\u2014': case '\u2015':
sb.Append('-');
default:
sb.Append(c)
}
formattedString = sb.ToString();
( - , (int)c >= 0x2013 && (int)c <= 0x2015, , , , ).
(, formattedString - , , , ).
, char , , . :
case 'ß':
sb.Append("ss");
, , - . , .
. , , US-ASCII. 128 , :
char[] replacements = {}
StringBuilder sb = new StringBuilder(formattedString.length);
foreach(char c in formattedString)
sb.Append(replacements[(int)c]);
formattedString = sb.ToString();
Unicode, 109 000 0 1114111. , , , ( , , ), .
, - ( ). , , , , :
char[] unchanged = new char[128];
for(int i = 0; i != 128; ++i)
unchanged[i] = (char)i;
char[] error = new string('\uFFFD', 128).ToCharArray();
char[] block0 = (new string('\uFFFD', 13) + "---" + new string('\uFFFD', 112)).ToCharArray();
char[][] blocks = new char[8704][];
for(int i = 1; i != 8704; ++i)
blocks[i] = error;
blocks[0] = unchanged;
blocks[64] = block0;
StringBuilder sb = new StringBuilder(formattedString.Length);
foreach(char c in formattedString)
{
int cAsI = (int)c;
sb.Append(blocks[i / 128][i % 128]);
}
string ret = sb.ToString();
if(ret.IndexOf('\uFFFD') != -1)
throw new ArgumentException("Unconvertable character");
formattedString = ret;
, ( ) , , , . , , (- ), , , .
, , , 384 , ( ), 109 000 , ( , ), , , , .
, , , " ", UTF-16, .NET, char ?
, , ( -, , ). US-ASCII, System.Text.Encoding EncoderFallback EncoderFallbackBuffer . , ( ) , .