Юникод, VBScript и HTML - PullRequest
       8

Юникод, VBScript и HTML

3 голосов
/ 18 ноября 2009

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

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

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

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 ]

2 голосов
/ 18 ноября 2009

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

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 ... :)

1 голос
/ 19 ноября 2009

Вот функция 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 VBScripts (вместо UTF-8)."

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...