Hallo
Utf8 benötigt doch eigentlich keine BOM oder sehe ich das falsch.
Wie dem auch sei, als Workaround:
Öffne die Datei nach dem speichern nochmal mit einem vernünftigen Editor ( für Windows z.B. Notepad
++ unter Linux gehts mit Geany ) und stelle dort ein mit BOM zu speichern.
Zu deinem Code hätte ich eine etwas komfortablere und aufgeräumtere Variante in Python:
edit: Dekodierung in selection_to_file abgeändert, in der Form wird die BOM geschrieben
Code: Alles auswählen
# -*- coding: utf-8 -*-
import uno
import os
import codecs
context = XSCRIPTCONTEXT
ctx = uno.getComponentContext()
servicemanager = ctx.ServiceManager
createUnoService = servicemanager.createInstance
def selection_to_file():
""" Store a single Range-selection into a .tsv-like Textfile
(tsv → Tab Separated Values ) """
doc = context.getDocument()
sourcerange = doc.getCurrentSelection()
source = sourcerange.getDataArray()
filename = FilePicker()
if filename:
lines = [ ]
for row in source:
lines.append( '\t'.join( ['%s' %(elem) for elem in row ] ))
with codecs.open( filename , "w", "utf-8-sig" ) as outfile: # mit BOM 'utf-8-sig' statt 'utf8'
outfile.write( '\n'.join( lines ))
def FilePicker():
filepicker = createUnoService( "com.sun.star.ui.dialogs.FilePicker" )
filepicker.setDisplayDirectory("file:///home/karo/aaa/" )
filepicker.initialize( ( 1,) )
if filepicker.execute():
return uno.fileUrlToSystemPath( filepicker.getFiles()[0] )
def getpath():
folderpicker = createUnoService( "com.sun.star.ui.dialogs.FolderPicker" )
folderpicker.initialize( ( 1,) )
if folderpicker.execute():
return uno.fileUrlToSystemPath( folderpicker.getDirectory())
Im Unterschied zu deinem Code wird hier der
explizit selektierte Bereich in eine
Tabulatorseparierte Textdatei geschrieben
Karo