Страница 1 из 1

Русские символы в Active Directory

Добавлено: 18 апр 2006, 13:36
Undetect
Доброго всем времени суток.

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

Написал скрипт для создания автоподписей (русских и английских). запускаю - английские создаются на ура, а вот с русскими происходит беда. Из AD данные берутся, но при попытке сохранить их в файл или вывести на экран через WScript.Echo выскакивает ошибка несовпадения типов.
Вот небольшой пример. Поле Description заполнено русскими чарами, поле Company должно быть заполнено обязательно, иначе это системный пользователь.

Код: Выделить всё

' VBScript source code
Const ADS_SCOPE_SUBTREE = 2

Dim objConnection
Dim objCommand
Dim objRecordset

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand    = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "мой.домен.local"

Set fso = CreateObject("Scripting.FileSystemObject")
Set objCommand.ActiveConnection = objConnection

objCommand.CommandText = "Select HomeDirectory, Description, DisplayName, Mail, Title, Department, Company, " & _
    " TelephoneNumber, FacsimileTelephoneNumber, WWWHomePage" & _
    " from 'LDAP://DC=airmg,DC=local' " & _
    " Where objectClass='user' and objectClass='person' and objectClass <> 'computer'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    IF Not IsNull(objRecordSet.Fields("Company").Value) Then
	WScript.Echo objRecordSet.Fields("Description").Value
    End If
    objRecordSet.MoveNext
Loop
Как я понимаю - в AD русские чары хранятся в юникодах. А при записи в текстовый файл или при отображении через эхо используется ANSI кодировка. Если кто-нибудь подскажет, как мне преобразовать строку - буду очень признателен.

Спасибо за помощь.

PS: открытие файла через CreateTextFile(Filename, true, true) проблемы не решает.

Добавлено: 18 апр 2006, 15:39
Student
Set objLogFile = objFileSystem.OpenTextFile({имя файла}, 8, True, -1) пробовал? Результат - как раз текстовый файл в UTF8.

Добавлено: 18 апр 2006, 15:40
Student
Примечание - UTF8 определяется параметром "-1".

Добавлено: 18 апр 2006, 16:08
Undetect
Не проходит. Type Mismatch. Возможно перед тем как печатать тем или иным образом строку с русскими чарами, взятую из AD, её нужно предварительно подготовить.

Добавлено: 18 апр 2006, 16:53
Undetect
Причем "Type Mismatch" именно на той строке, где я пытаюсь распечатать objRecordSet.Fields("Description").Value с русскими символами

Добавлено: 18 апр 2006, 18:38
Undetect
Посоветовали использовать WideString. не могу на мелкомягких найти описание метода или функции с таким названием

Абломс... WideString - это из дельфи

Добавлено: 18 апр 2006, 23:03
Duncon
Это не метод и не функция - это строковой тип данных он не только в Delphi встречается, предназначен для записи очень большого количества инфы если, возмем все ту же Delphi, размер string 255 байт, то у WideString приммерно 2 в 30 степени, тобишь может достигать размера где-то 2 гига, я думаю этого должно хватить для всего... :D

Добавлено: 19 апр 2006, 08:08
Undetect
Это не метод и не функция - это строковой тип данных он не только в Delphi встречается, предназначен для записи очень большого количества инфы если, возмем все ту же Delphi, размер string 255 байт, то у WideString приммерно 2 в 30 степени, тобишь может достигать размера где-то 2 гига, я думаю этого должно хватить для всего...
Как мне использовать этот тип данных в VBScript?

Добавлено: 19 апр 2006, 10:41
Undetect
Вопрос закрыт. Поле Description - многострочное. Решение:

Код: Выделить всё

For Each str In objRecordSet.Fields("Description").Value
    WScript.Echo str
Next
Всем спасибо за советы.