Как получить код UTF-8 из одного символа в VBScript - PullRequest
3 голосов
/ 22 апреля 2020

Я хотел бы получить код символа UTF-8, пытался использовать потоки, но он не работает:

Пример: פ должен дать 16 # D7A4, согласно https://en.wikipedia.org/wiki/Pe_ (Semitic_letter) # Character_encodings

Const adTypeBinary = 1
Dim adoStr, bytesthroughado
Set adoStr = CreateObject("Adodb.Stream")
    adoStr.Charset = "utf-8"
    adoStr.Open
    adoStr.WriteText labelString
    adoStr.Position = 0 
    adoStr.Type = adTypeBinary
    adoStr.Position = 3 
    bytesthroughado = adoStr.Read
    Msgbox(LenB(bytesthroughado)) 'gives 2
    adoStr.Close
Set adoStr = Nothing
MsgBox(bytesthroughado) ' gives K

Примечание: AscW предоставляет Unicode - не UTF-8

1 Ответ

3 голосов
/ 23 апреля 2020

bytesthroughado - это значение подтипа byte() (см. 1-ю выходную строку), поэтому вам нужно обработать его соответствующим образом:

Option Explicit

Dim ss, xx, ii, jj, char, labelString

labelString = "ařЖפ€"
ss = ""
For ii=1 To Len( labelString)
  char = Mid( labelString, ii, 1)
  xx = BytesThroughAdo( char)
  If ss = "" Then ss = VarType(xx) & " " & TypeName( xx) & vbNewLine
  ss = ss & char & vbTab
  For jj=1 To LenB( xx)
      ss = ss & Hex( AscB( MidB( xx, jj, 1))) & " "
  Next
  ss = ss & vbNewLine
Next   

Wscript.Echo ss

Function BytesThroughAdo( labelChar)
    Const adTypeBinary = 1  'Indicates binary data.
    Const adTypeText   = 2  'Default. Indicates text data.
    Dim adoStream
    Set adoStream = CreateObject( "Adodb.Stream")
    adoStream.Charset = "utf-8"
    adoStream.Open
    adoStream.WriteText labelChar
    adoStream.Position = 0 
    adoStream.Type = adTypeBinary
    adoStream.Position = 3 
    BytesThroughAdo = adoStream.Read
    adoStream.Close
    Set adoStream = Nothing
End Function

Вывод :

cscript D:\bat\SO\61368074q.vbs
8209 Byte()
a       61
ř       C5 99
Ж       D0 96
פ       D7 A4
€       E2 82 AC

Я использовал символы ařЖפ€ для демонстрации функциональности вашего кодировщика UTF-8 (скрипт alts8.ps1 PowerShell взят из другого проекта):

alts8.ps1 "ařЖפ€"
Ch Unicode     Dec    CP    IME     UTF-8   ?  IME 0405/cs-CZ; CP852; ANSI 1250

 a  U+0061      97         …97…      0x61   a  Latin Small Letter A
 ř  U+0159     345         …89…    0xC599  Å�  Latin Small Letter R With Caron
 Ж  U+0416    1046         …22…    0xD096  Ð�  Cyrillic Capital Letter Zhe
 פ  U+05E4    1508        …228…    0xD7A4  פ  Hebrew Letter Pe
 €  U+20AC    8364        …172…  0xE282AC â�¬  Euro Sign
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...