Список форумов Форум Libreoffice

Форум Libreoffice

Добро пожаловать на Форум Libreoffice!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

English French German Italian Portuguese Russian Spanish
Декодирование UTF-8 записью/чтением файла

 
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic
Предыдущая тема :: Следующая тема  
Автор Сообщение
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Пт Ноя 11, 2011 9:37 pm    Заголовок сообщения: Декодирование UTF-8 записью/чтением файла Ответить с цитатой

Декодирование файла в кодировке UTF-8 возможно записью в файл, а затем чтением из этого файла с использованием сервисов com.sun.star.ucb.SimpleFileAccess, com.sun.star.io.TextOutputStream, com.sun.star.io.TextInputStream.

Например, есть файл odt с текстом в кодировке UTF-8.



Макрос для декодирования, декодирует текущий документ и записывает результат в новый документ "decode_utf8",
файл "C:\iconv\uuu" - вспомогательный, используется для кодирования/декодирования с помощью записи/чтения.
Код:
Sub decode_utf8( )
   oStr = ThisComponent.getText().String

   sFileName="C:\iconv\uuu"

   sEncodeRead="UTF-8"
   sEncodeWrite="Windows-1251"

   writefile(oStr, sFileName, sEncodeWrite)

'''''''' Ожидание записи файла '''''''''''''''''''''''''''''''''''''''''''
'wait 1000
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

   oStr = readfile(sFileName, sEncodeRead)

   oStr=Replace(oStr, funichar(65533) & "?", "И")   '<- ИСПРАВИТЬ ОШИБКУ ДЕКОДЕРА UTF-8
   
   Dim Args(0) As New com.sun.star.beans.PropertyValue
   oDoc1 = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Args())
   oDoc1.Title="decode_utf8"
   oTextCursor = oDoc1.Text.CreateTextCursor()
   oDoc1.Text.insertString(oTextCursor,oStr,False)
End Sub


Запись и чтение файла с кодированием/декодированием:
Код:
Sub writefile(engstr, sPath, sEncoding)
   sfa = createUnoService("com.sun.star.ucb.SimpleFileAccess")
    tos = createUnoService("com.sun.star.io.TextOutputStream")
    oFile = sfa.openFileWrite(sPath)
      oFile.truncate()
   
    tos.OutputStream = oFile
    tos.Encoding = sEncoding
    tos.WriteString(engstr)

    oFile.closeOutput
    tos.closeOutput
End Sub

Function readfile(sPath, sEncoding)
Dim sData(0)
      sfa = createUnoService("com.sun.star.ucb.SimpleFileAccess")
   tis = createUnoService("com.sun.star.io.TextInputStream")
    oFile = sfa.openFileRead(sPath)

    tis.Encoding=sEncoding
    tis.setInputStream(oFile)

sLine=""
k=1

Do While tis.isEOF=false
    sData(n) = tis.ReadLine
    If fcode(sData(n))=0 And k=1 Then
       sLine = sLine & sData(n) & Chr(13) '& Chr(10)
       k=2
    Else
       sLine = sLine & sData(n) & Chr(13) '& Chr(10)
         k=1
     End If
     If fcode(sData(n))=0 And k=2 Then
        sLine=sLine
     End If
Loop
    oFile.closeInput
    tis.CloseInput()
      readfile=sLine
End Function

Дополнительные функции для символов и кодов (в т.ч. Unicode):
Код:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function fcode(u) As Integer
   FuncAcc = createunoservice("com.sun.star.sheet.FunctionAccess")
   fcode= FuncAcc.callFunction("CODE",array(u))
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function fchar(u) 'As String
   FuncAcc = createunoservice("com.sun.star.sheet.FunctionAccess")
   fchar= FuncAcc.callFunction("CHAR",array(u))
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function funicode(u) As Double
   FuncAcc = createunoservice("com.sun.star.sheet.FunctionAccess")
   funicode= FuncAcc.callFunction("UNICODE",array(u))
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function funichar(u) 'As String
   FuncAcc = createunoservice("com.sun.star.sheet.FunctionAccess")
   funichar= FuncAcc.callFunction("UNICHAR",array(u))
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Результат декодирования:



Файл с примером: http://ifolder.ru/26898819
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic Часовой пояс: GMT
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS