- Код: Выделить всё
Open filename For mode As fileno
создает файлы в ASII кодировке. Каким образом создать файл в Unicode кодировке?
Open filename For mode As fileno
Private Sub Form_Load()
FontName = "Verdana"
End Sub
Private Sub Form_Click()
Dim z As String
Dim s As String
Dim v As String
Dim f() As Byte
Dim b() As Byte
ReDim f(1)
f(0) = &H10
f(1) = &H1
z = StrConv(f, vbUnicode)
ReDim b(1)
b(0) = &H66
b(1) = &H1
s = StrConv(b, vbUnicode)
v = s + z + s + z + z + s + s
Open "c:\Unicode.txt" For Binary As #1
Put #1, , v
Close #1
End Sub
Dim buff() As Byte, tag() As Byte, S As String
ReDim tag(0 to 1)
tag(0) = 255
tag(1) = 254
S = "sample text"
ReDim buff(0 To LenB(S)-1)
buff = S
Open "..." For Binary As #1
Put #1, tag
Put #1, buff
Close #1
Lotreck писал(а):А как быть с символами чей код превышает 255, ваш пример с ними не работает.
Set Stream = CreateObject("ADODB.Stream")
Stream.Open
Stream.Type = 2
Stream.Charset = "UTF-8"
Stream.WriteText "Произвольный текст"
Stream.SaveToFile "C:\1.txt",2
Private Sub Command1_Click()
Dim buff() As Byte, tag() As Byte, s As String
Dim A As String
Open "c:\UU.txt" For Input As #2
Do Until EOF(2)
Line Input #2, A
Loop
Close #2
ReDim tag(0 To 1)
tag(0) = 255
tag(1) = 254
s = A
ReDim buff(0 To LenB(s) - 1)
's = A
buff = s
Open "c:\Unicode.txt" For Binary As #1
Put #1, , tag
Put #1, , buff
Close #1
End Sub
Private Sub Form_Load()
FontName = "Verdana"
Dim z As String
Dim k As String
Dim v As String
Dim f() As Byte
Dim b() As Byte
ReDim f(1)
f(0) = &H10
f(1) = &H1
z = StrConv(f, vbUnicode)
ReDim b(1)
b(0) = &H66
b(1) = &H1
k = StrConv(b, vbUnicode)
v = k + z + k + z + k + z
Open "c:\UU.txt" For Binary As #1
Put #1, , v
Close #1
End Sub
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", True, True)
MyFile.WriteLine("This is a test.")
MyFile.Close
Andrey Fedorov писал(а):Надо сказать что в данном случае первые два байта файла - признак того что файл сохранен в уенкоде.
dim s as string,b() as byte
s=chrw(&hfeff) 'признак уникода
s=s & chrw(&h038f) & chrw(&h039e) & chrw (&h0398)
b=s 'присваиваем строку массиву байтов (чтобы не растерять уникод)
Open "c:\UU.txt" For Binary As #1
Put #1, , b
Close #1
Не складывай строки плюсами. Пиши всместо плюса &v = k + z + k + z + k + z
Dim tag() As Byte, buff() As Byte, N As Long, S As String
Open ... For Binary As #1
Seek #1, 1
ReDim tag(0 To 1)
Get #1, , tag
N = LOF(1) - 2
ReDim buff(0 To N-1)
Get #1, , buff
S = buff
S = Replace$(S, "11", ChrW$(...))
S = Replace$(S, "12", ChrW$(...))
...
S = Replace$(S, "99", ChrW$(...))
buff = S
Seek #1, 1
Put #1, , tag
Put #1, , buff
Close #1
необходимо было постоянно использовать около десятка юникодовских символов
Есил как в процетированном коде - то это был вариант, первым пришедший в голову и довольно корявый. Ниже в том топике мы добрались до более удобного и правильного - как выяснилось, chrw() нормально работает.Юникодовские символы вводил в переменную по предложенному Вами варианту
Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 23