2011-09-27 69 views
1

不顯示我有一個MVC Razor視圖存儲在我的數據庫中的VARCHAR字段ASCII字符瀏覽器

@{ 
ViewBag.Title = "Index"; 
var c = (char)146; 
var c2 = (short)'’'; 
} 
<h2>@c --- @c2 --’-- ‘Why Oh Why’ & &#146;</h2> 
@String.Format("hi {0} there", (char)146) 

字符不會被渲染到瀏覽器。 此示例演示字符146如何不顯示 如何使它們呈現?

[編輯]

當我做這個角色146弄轉換爲Unicode 8217,但如果146試圖直接在瀏覽器中呈現失敗

public ActionResult Index() 
    { 

     using (var context = new DataContext()) 
     { 
      var uuuuuggghhh = (from r in context.Projects 
           where r.bizId == "D11C6FD5-D084-43F0-A1EB-76FEED24A28F" 
           select r).FirstOrDefault(); 

      if (uuuuuggghhh != null) 
      { 
       var ca = uuuuuggghhh.projectSummaryTxt.ToCharArray(); 
       ViewData.Model = ca[72]; // this is the character in question 
       return View(); 
      } 
     } 


     return View(); 
    } 

回答

0

我們最終同意數據已損壞,我們已經詢問無法看到此內容的用戶字符呈現以修復源數據

1
@Html.Raw(((char)146).ToString()) 

@Html.Raw(String.Format("hi {0} there", (char)146)) 

都顯示工作。我在Chrome中測試了這個數據,並且在用FF查看後仍然獲得空白數據,我可以確認表示正在打印(但146似乎不是可讀的字符)。

這將在下面證實可讀字符「¶」:

@Html.Raw(((char)182).ToString()) 

不知道爲什麼你會想,雖然這個。但是祝你好運!

+0

@ Html.Raw(String.Format(「hi {0} there」,(char)146))不會這樣做。 – Peter

+0

使用(VAR上下文=新的DataContext()){ VAR = uuuuuggghhh(從context.Projectsř 其中r.bizId == 「D11C6FD5-D084-43F0-A1EB-76FEED24A28F」 選擇R).FirstOrDefault() ;如果(uuuuuggghhh!= null) var ca = uuuuuggghhh.projectSummaryTxt.ToCharArray(); ViewData.Model = ca [72]; //這裏這個字符變成unicode當我這樣做時 return View(); } } – Peter

+0

閱讀上面的內容,如果您使用'@ Html.Raw()'我認爲是'@ Html.Raw(ViewBag.Model.ToString())'這個例子,它應該工作。看看Firefox。 – GONeale

1

你不想使用字符146.字符146是U + 0092 PRIVATE USE TWO,一種模糊和無用的控制字符,通常呈現爲不可見或缺失字形框/問號。

如果您想要字符:即U + 2019單引號引用標記,可以直接編寫或使用&#x2019;&#8217;

146是U + 2019到Windows西方代碼頁(cp1252)編碼的字節數,但它不是Unicode字符數。底部的256個Unicode字符的排序與ISO-8859-1編碼中的字節相同; ISO-8859-1與cp1252類似,但不完全相同。

cp1252中的字節128-159對各種印刷精度進行編碼,如智能引號,而ISO-8859-1中的字節128-159(因此Unicode中的字符128-159)是很少使用的控制字符。對於Web應用程序,您通常會在進入時過濾出控制字符(其他幾個中的控制字符爲0-31和128-159),因此它們不會達到數據庫的程度。

如果您將字符146從您的數據庫中取出,並且您希望有一個智能報價,那麼您的數據已損壞,並且需要在繼續之前修復它,或者您可能正在使用錯誤的編碼讀取數據庫(它的工作方式取決於你在與哪個數據庫交談)。

現在這裏是陷阱。如果你寫:

&#146; 

爲一個字符引用,瀏覽器實際顯示智能報價U + 2019 ,而且容易混淆,實際擁有的代碼點沒用的控制字符!

這是一個老的瀏覽器怪癖:在的範圍內的字符引用&#128;&#159;被轉換,而不是與該號碼的實際字符映射到在CP1252這個數字的字符。

這可以說是一個錯誤,但最早的瀏覽器在他們正確使用Unicode之前做了回來,並且其他人都被迫效仿以避免破壞頁面。 HTML5現在會對此進行歸檔和制裁。 (雖然不在XHTML序列化中;但在XHTML解析模式下的瀏覽器不會這樣做,因爲它違背了XML的基本規則。)

+0

是的,我們最終同意數據已損壞,我們已經要求用戶不能看到這個字符呈現來修復源數據 – Peter