Мастдай 8 Pro, кодировки, глюки.... Как реализовать Line Input TXT UTF8 ???

Автор Dr_Lecter, 18 октября 2015, 07:58

0 Пользователи и 1 гость просматривают эту тему.

Dr_Lecter

Итак, вчера как всегда нежданно порадовал Мастдай(R) 8.1 Pro - мелкософт даже в 2015 году не могут починить кодировки:

Есть функция:

Function sReadTextFileToString(sInputFilename AS String) AS String
Dim iInputFileNo AS Integer
Dim sCurrentLine AS String
iInputFileNo = Freefile
Open sInputFilename For Input As #iInputFileNo
Do While not eof(iInputFileNo)
Line Input #iInputFileNo, sCurrentLine
If sCurrentLine <> "" Then
sReadTextFileToString = sReadTextFileToString & sCurrentLine & Chr(10)
End If
Loop
Close #iInputFileNo
End Function


Т.к. основной системой являться Mac OS X то во время разработки и отладки все работало на ура. В Linux - тоже без проблем.
Но ведь у нас же есть Мастдай(R)!!!

Поэтому данная функция не может забрать текст из TXT отчета УЗ-сканера, т.к. он в кодировке UTF-8. А Apache Open Office 4.1.1 желает почему-то читать только файлы с кодировкой Windows Cyrillic-1251 и никак иначе. А UTF-8 забирает кракозябрами.

Экспериментальным путем установлено, что нужно открыть исходный файл отчета в блокноте, скопировать текст в новый файл и сохранить его. Таким образом  у него будет 1251 и все заработает.

Кто сталкивался, подскажите есть нормальное решение, или придется искать утилиту перекодирования страницы из командной строки?

У буржуев нашел рекомендацию что нужно работать с файлом через com.sun.star.ucb.SimpleFileAccess но я никак не разберусь с UNO - там документации толком нет, очень не понятно как с этой технологией работать. А по ссылке уже тема старая пример не скачать.

Заранее спасибо!

JohnSUN

Да на здоровье!
См. стандартную библиотеку Tools, модуль UCB, процедуру LoadDataFromFile... или лучше не смотри, а сразу используй:
Sub tstReadUTF8
Dim a As Variant
Dim s As String
a = Array()
s = ConvertToUrl("D:\путь\к\протоколу\файл.uzi")
GlobalScope.BasicLibraries.LoadLibrary("Tools")
LoadDataFromFile(s, a)
Print "О! Считано "+(UBound(a)+1)+" строк в нормальной кодировке..."
End Sub
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от 18 октября 2015, 08:26Print "О! Считано "+(UBound(a)+1)+" строк в нормальной кодировке..."
Вроде нужно в ненормальной ???
Цитата: Dr_Lecter от 18 октября 2015, 05:58Поэтому данная функция не может забрать текст из TXT отчета УЗ-сканера, т.к. он в кодировке UTF-8. А Apache Open Office 4.1.1 желает почему-то читать только файлы с кодировкой Windows Cyrillic-1251 и никак иначе. А UTF-8 забирает кракозябрами.

Экспериментальным путем установлено, что нужно открыть исходный файл отчета в блокноте, скопировать текст в новый файл и сохранить его. Таким образом  у него будет 1251 и все заработает.

bormant

Автору на яд. Поддержать форум.

Dr_Lecter

Всем большое спасибо! Вопрос решен, тему можно закрывать.

Воспользовался решением от bormant - вот результат, работает отлично.

Function sReadTextFileToString(sInputFilename AS String) AS String
Dim oUcb as Object
Dim oInputStream as Object
Dim oInputFile AS Object
Dim sCurrentLine AS String
oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
If oUcb.Exists(sInputFilename) Then
oInputStream = createUnoService("com.sun.star.io.TextInputStream")
oInputFile = oUcb.OpenFileReadWrite(sInputFilename)
oInputStream.SetInputStream(oInputFile.GetInputStream)
Do While not oInputStream.IsEOF
sCurrentLine = oInputStream.ReadLine
If sCurrentLine <> "" Then
sReadTextFileToString = sReadTextFileToString & sCurrentLine & Chr(10)
End If
Loop
End If
oInputStream.CloseInput()
End Function