[英]HTML Encoding characters not in the character set
我們有一個使用ISO-8859-1字符集的網絡應用程序。 職業用戶具有“奇怪”的名稱,其中包含Š之類的字符(為方便起見,此處將html編碼)。 我們將此存儲在數據庫中,但是 我們無法正確顯示它。
處理此問題的最佳方法是什么? 我想我應該使用其HTML實體數字編碼(Š到Š
)自動將字符集之外的字符轉換
但是我在尋找如何自動執行此操作時遇到了問題(不使用所有值的表)。
該代碼適用於擴展的ASCII字符,例如“å”(ISO-8859-1中存在)。 我想對其他角色也一樣。 我可以使用這些HTML實體編碼值中是否存在模式?
unsigned int c;
for( int i=0; i < html.GetLength(); i++)
{
c = html[i];
if( c > 255 || c < 0 )
{
CString orig = CString(html[i]);
CString encoded = "&#";
encoded += CTool::String((byte)c);
encoded += ";";
html.Replace(orig, encoded);
}
}
該網頁應指示瀏覽器以UTF-8 顯示響應。 這通常是通過在Content-Type
響應標頭中提供字符集(例如text/html;charset=UTF-8
。
Response.AppendHeader("Content-Type", "text/html;charset=UTF-8");
HTML / XML實體僅在此處,因此您將能夠以UTF-8以外的其他格式保存網頁源。
html似乎是“ Unicode” CString。 這意味着它是UTF-16編碼的。 “&#ddd”語法使用Unicode代碼點編號。 通常,這很簡單。 Š
是U + 0160,這意味着它在UTF-16中為0x0160。 Tha當然是352小數,所以得到Š
。
僅當遇到基本多語言平面(BMP)之外的字符(超過U + FFFF)時,您才有問題。 這不再適合16位,因此將在您的html
字符串中使用兩個字符。 但是,它應該只產生一個&#ddddd
值。 這種情況很少見,您常常可以忽略它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.