簡體   English   中英

HTML編碼字符不在字符集中

[英]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小數,所以得到&#352

僅當遇到基本多語言平面(BMP)之外的字符(超過U + FFFF)時,您才有問題。 這不再適合16位,因此將在您的html字符串中使用兩個字符。 但是,它應該只產生一個&#ddddd值。 這種情況很少見,您常常可以忽略它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM