Как установить японские символы (UTF-8) в переменных VBScript - PullRequest
0 голосов
/ 08 января 2020

У меня есть скрипт, в котором мне нужно установить переменный текст на японском языке. Но поскольку vbscript не поддерживает японские тексты, он преобразуется в искаженный текст, такой как トコジャパンã‹ã‚‰ã®æ–°è¦æ³¨æ–‡. Мой настоящий японский текст - トコジャパンからの新規注文.

Мой сценарий будет выглядеть следующим образом

dim emlObj
set emlObj = CreateObject("EMailObject")
emlObj.Subject = "Train - New Orders From Costco Japan | コストコジャパンからの新規注文"
emlObj.Body = "Some japanese body text"
emlObj.Send()

У меня нет других вариантов, таких как сохранение этого текста в файле или БД и обработка в некоторых других сценариях на данный момент. так как этот скрипт будет использоваться нашими клиентами, и они установят ожидаемый текст сообщения электронной почты. Мы будем использовать их для отправки по почте.

Я также попробовал ADODB.Steam, но это работает только при чтении текста из файла.

Может кто-нибудь предложить способ установить японский текст в VBScript?.

Редактировать: Чтобы прояснить, что мне действительно нужно. Я хочу жестко закодировать японский текст в переменную в VBScripts.

Ответы [ 2 ]

0 голосов
/ 09 января 2020

ВАЖНО: Поскольку вы не используете ADODB.Stream для загрузки своего контента, сохраните фактический файл VBScript в формате UTF-16 LE . Ваш сценарий может дополнительно использовать заголовок метки порядка байтов Unicode ( BOM ), а также - в зависимости от того, как отвечают обработчик VBScript и EmailObject.

Как только файл VBScript находится в правильная кодировка, этот скрипт прекрасно работает для меня:

With CreateObject("CDO.Message")
    With .Configuration.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")  = "smtp.somemailserver.net"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10 
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        .Update
    End With

    .BodyPart.Charset = "utf-8"
    .BodyPart.ContentTransferEncoding = "base64"

    .TextBody = "コストコジャパンからの新規注文"
    .TextBodyPart.Charset = "utf-8"

    .HTMLBody = "<p>コストコジャパンからの新規注文</p>"
    .HTMLBodyPart.Charset = "utf-8"

    .From = "me@somemailserver.net"
    .To = "you@somemailserver.net"
    .Subject = "Train - New Orders From Costco Japan | コストコジャパンからの新規注文"

    .Send()
End With

Примечание: я использую CDO.Message выше, а не EmailObject .

Надеюсь, это поможет.

0 голосов
/ 08 января 2020

Вы можете использовать это решение:

Dim objStream, body, subject
Set objStream = CreateObject("ADODB.Stream")
objStream.CharSet = "utf-8"
objStream.Open
objStream.WriteText "Subject in Japanese"
objStream.SaveToFile "C:\Subject.txt", 2
objStream.Close
objStream.Open
objStream.WriteText "Body in Japanese"
objStream.SaveToFile "C:\body.txt", 2
objStream.Close
objStream.CharSet = "utf-8"
objStream.Open
objStream.LoadFromFile "C:\Body.txt"
body = objStream.ReadText()
objStream.Close
objStream.CharSet = "utf-8"
objStream.Open
objStream.LoadFromFile "C:\Subject.txt"
subject = objStream.ReadText()
objStream.Close
' Now body is stored in body variable and subject is in subject now do anything with them
...