2009-11-18 2 views
3

У меня есть следующие радио окно: <input type="radio" value="&#39321;">&#39321;</input>Unicode, VBScript и HTML

Как вы можете видеть, значение Юникода. Он представляет собой следующий китайский характер: 香

Пока все хорошо. У меня есть VBScript, который считывает значение этого конкретного переключателя и сохраняет его в переменной. Когда я показываю содержимое с помощью окна сообщения, появляется китайский символ. Кроме того, у меня есть переменная UNIVAL где Поручаю Юникода китайского иероглифа непосредственно:

radioVal = < read value of radio button > 
MsgBox radioVal ' yields chinese character 
uniVal = "&#39321;" 
MsgBox uniVal ' yields unicode representation 

Есть ли возможность прочитать значение радио коробки таким образом, что строка Юникода сохраняется и не интерпретируется как китайский символ?

Конечно, я мог бы попытаться воссоздать юникод символа, но методы, которые я нашел в VBScript, работают некорректно из-за неявной установки UTF-16 VBScripts (вместо UTF-8). Таким образом, следующий метод не работает для всех персонажей:

Function StringToUnicode(str) 
    result = "" 
    For x=1 To Len(str) 
     result = result & "&#"&ascw(Mid(str, x, 1))&";" 
    Next 
    StringToUnicode = result 
End Function 

Приветствия Chris

ответ

2

Я получил решение:

JavaScript находится в распоряжении функции, которая на самом деле работает:

function convert(value) { 
var tstr = value; 
var bstr = ''; 
for(i=0; i<tstr.length; i++) { 
if(tstr.charCodeAt(i)>127) 
    { 
    bstr += '&#' + tstr.charCodeAt(i) + ';'; 
    } 
else 
    { 
    bstr += tstr.charAt(i); 
    } 
} 
return bstr; 
} 

Я вызываю эту функцию из своего VBScript ... :)

+0

+1, спасибо за то, что нашли доступное решение! – Heinzi

+0

http://jsfiddle.net/3zvP8/ быстрая интерактивная демонстрация – h3xStream

1

Вот функция VBScript, которая всегда будет возвращать положительное значение для кода точки Unicode данного символа: -

Function PositiveUnicode(s) 

    Dim val : val = AscW(s) 
    If (val And &h8000) <> 0 Then 
     PositiveUnicode = (val And &h7FFF) + &h8000& 
    Else 
     PositiveUnicode = CLng(val) 
    End If 

End Function 

Это сэкономит вам загрузку два сценария двигателей для того чтобы достигнуть простой операции.

не работает должным образом из-за неявной установки UTF-16 VBScript (вместо UTF-8). "

Эта проблема не имеет отношения к UTF-8. Это чисто результат использования AscW знакового целочисленного типа.

Что касается того, почему вы должны воссоздать & #xxxxx; кодировки, которые вы отправили, это результат работы HTML (и XML). Использование этого объекта кодирования символов является убеждением в том, что спецификация не требует сохранения. Поскольку кодировка символа документа вполне способна или представляет этот символ, DOM имеет право его преобразовать.

Смежные вопросы