任何人都知道如何在C#中編碼ISO-8859-2字符集?下面的例子不工作:HTML在C#中編碼ISO-8859-2(Latin-2)字符
String name = "Filipović";
String encoded = WebUtility.HtmlEncode(name);
結果字符串應該是
"Filipović"
感謝
任何人都知道如何在C#中編碼ISO-8859-2字符集?下面的例子不工作:HTML在C#中編碼ISO-8859-2(Latin-2)字符
String name = "Filipović";
String encoded = WebUtility.HtmlEncode(name);
結果字符串應該是
"Filipović"
感謝
如果你沒有對HTML編碼我嚴格要求d推薦使用編碼所有非ASCII字符的Url(%)編碼:
String name = "Filipović";
String encoded = WebUtility.UrlEncode(name); // Filipovi%C4%87
如果您必須將包含所有非ASCII字符的字符串始終用HTML編碼,則最佳方法是使用&xNNNN;
或&#NNNN;
format對127以上的所有字符進行編碼。不幸的是,無法容易地使用HtmlEncode
對所有字符進行編碼,因此您需要自己動手做,也就是在Convert a Unicode string to an escaped ASCII string中做的。你可以繼續使用HtmlDecode
來讀取它的值,它處理&#xNNNN
就好了。
非最佳樣本:
var name = "Filipović";
var result = String.Join("",
name.Select(x => x < 127 ? x.ToString() : String.Format("&#x{0:X4}", (int)x))
);
閱讀您的意見(你應該只支持使用ASCII字符也是中國人的名字),我想你以後不應該堅持ISO-8859-2編碼。
溶液1個
使用UTF-7編碼爲這樣的名稱。 UTF-7被設計爲只對任何Unicode字符串使用ASCII字符。
string value = "Filipović with Unicode symbol: ";
var encoded = Encoding.ASCII.GetString(Encoding.UTF7.GetBytes(value));
Console.WriteLine(encoded); // Filipovi+AQc- with Unicode symbol: +2Dzf7w-
var decoded = Encoding.UTF7.GetString(Encoding.ASCII.GetBytes(encoded));
解決方案2
或者,你可以使用base64編碼,太。但在這種情況下,純ASCII字符串將不再是人類可讀的。
string value = "Filipović with Unicode symbol: ";
encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(value));
Console.WriteLine(encoded); // RmlsaXBvdmnEhyB3aXRoIFVuaWNvZGUgc3ltYm9sOiDwn4+v
var decoded = Encoding.UTF8.GetString(Convert.FromBase64String(encoded));
解決方案3
如果你真的堅持到HTML實體編碼,你可以這樣實現它:
string value = "Filipović with Unicode symbol: ";
var result = new StringBuilder();
for (int i = 0; i < value.Length; i++)
{
if (Char.IsHighSurrogate(value[i]))
{
result.Append($"&#{Char.ConvertToUtf32(value[i], value[i + 1])};");
i++;
}
else if (value[i] > 127)
result.Append($"&#{(int)value[i]};");
else
result.Append(value[i]);
}
Console.WriteLine(result); // Filipović with Unicode symbol: 🏯
只是愛問......爲什麼?您是否使用ISO-8859-2爲客戶提供文件?如果您以UTF-8格式提供它們,則不必擔心諸如ć的html編碼字符。 – Culme
將用戶輸入存儲到數據庫中時,'ć'等字符在沒有編碼的情況下被存儲爲'c' – reeax
我知道我現在可能沒有幫助,但聽起來您應該真的嘗試更改數據庫列的數據類型在其中存儲名稱。你有選擇更改數據庫嗎? – Culme