2014-07-23 172 views
3

我2箱子這裏:爲什麼non-ascii字符顯示爲怪異的符號?

我的數據庫包含了大量的信息,我想獲取到的頁面,其中一些信息是包含非ASCII字符像Uwe Rülke

名字 - 老解決方案效果很好:

我從DB獲取數據並直接從VBwhile循環中填充頁面。在這種情況下,所有字符都正確顯示Uwe Rülke

- 新的解決方案,它不能正常工作:

的VB的While循環不會將數據直接扔頁面,而在JS字符串(通過不時地調用數據庫來提高性能)。但是當我使用存儲在JS變量中的信息時,我得到了如下所示:Uwe R�lke

在這兩種情況下,網頁的編碼方式是:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 


我有什麼錯?

EDIT

這是用於獲取(從DB)的代碼,然後保存到JS字符串。

我使用AJAX LOAD從頁面ISEquery建立一個特定的請求,並從數據庫中查詢它。它用於將數據作爲excel文件或簡單的HTML獲取。 在這一點上,chars的代表性很好。

然後,奇蹟發生了,而且字符得到誤代表,我檢查在exctractFields功能

$("<div></div>").load("ISEquery.asp?isExcel=0&" + info, function(){ 
          // Extracting the fields into an array 
          var rows = ""; 
          var options = ""; 
          $(this).children().each(function(index){ 
           var fieldsArray = exctractFields($(this).html()); 
           rows += createISELine(fieldsArray); 
           options += createISELine_ComboBox(fieldsArray); 
          }); 
         }); 
+2

AFAIK,Javascript使用UTF-8,所以這是一個misecoding。你需要輸出你的頁面在UTF-8 – Kroltan

+0

@Kroltan,nope沒有工作!我改變了它之間的幾個記錄和相同的結果。 – user2517028

+0

向我們展示用於將數據傳輸到瀏覽器的代碼。 –

回答

2

感謝Aaron Digulla的answer,我跟着從服務器到頁面的字符串,發現它在AJAX LOAD後被誤傳,所以我發現這個answer解決了我的問題。雖然我不得不使用charset="iso-8859-1"來工作,而不是charset="UTF-8"

所以最後的答案是:

-Encoding在HTML頁面:

<meta http-equiv="Content-Type" content="text/html"; charset="iso-8859-1"> 

-Encoding阿賈克斯數據:

$.ajaxSetup({ 
      'beforeSend' : function(xhr) { 
      xhr.overrideMimeType('text/html; charset=iso-8859-1'); 
     }, 
    }); 

現在字符被正確地顯示。 Thanx幫助你們..

+0

這表明您已將服務器配置爲始終使用編碼「iso-8859-1」返回數據。只要來自(西)歐洲的人使用它,這將會工作。您應該考慮在任何地方使用「UTF-8」,取而代之。 –

-2

字符串的Javascript默認編碼是UTF-16(16位),而ISO-8859- 1是8位。

Default Javascript Character Encoding?

我認爲你可以使用encodeURI()您的特殊字符轉換爲ASCII字符,事後你可以將它與decodeURI()

http://www.w3schools.com/jsref/jsref_encodeuri.asp

+2

-1默認的JavaScript源文件編碼是UTF-8。 16位字符值用於在內存中構建JS字符串。這與源代碼編碼無關。 –

+0

@AaronDigulla我的意思是它的字符串,我的錯。我在鏈接中提到了一個問題,在這裏他們解釋了字符串的編碼。 – GCallie

+0

在這種情況下,答案沒有幫助。問題在於他的VB腳本和客戶端之間的某處,他沒有使用正確的編碼。 –

5

意味着你使用的字符解碼從而可以沒有正確的代表。

服務器和客戶端之間的某處需要正確編碼字符串數據。我不知道如何將數據從服務器傳輸到客戶端(生成JavaScript,AJAX,GET請求),但很難說如何解決這個問題。

但是您需要做的事:對於每一步,您都必須確保您知道數據的當前編碼是什麼以及收件人的期望。

例如,如果您在HTML頁面中生成內嵌JavaScript,則字符串值必須使用與頁面相同的編碼進行編碼(iso-8859-1)。如果您使用AJAX,那麼通常您必須使用UTF-8

+0

謝謝,這是一個有用的答案,但並沒有真正解決我的問題。我用代碼和平更新了這個問題,現在可能更具信息性 – user2517028

+1

ISO-8859-1(Latin1)可以在AJAX中使用而不會出現問題。你不需要使用UTF-8。但建議對於使用UTF-8/UTF-16的網頁/應用程序,由於UTF包含的字符多於拉丁文,因此用戶很可能會使用不同的語言,例如法語西班牙語俄語中文日語。 – Sebastien

+0

這裏是你如何在網頁/應用上設置一些編碼:HTML: PHP:header('Content-Type: text/html; charset = UTF-8'); AJAX(noJQuery):xhr.setRequestHeader(「Content-Type」,「application/x-www-form-urlencoded; charset = UTF-8」); – Sebastien

相關問題