Avatar billede jpi Mester
13. juni 2008 - 08:17 Der er 15 kommentarer og
2 løsninger

Gemme fil i specielt format (UTF-8)

Jeg har noget VBA-kode i Access 2003 der laver en text-fil vha "print #"
Den resulterende text-fil kan dog ikke læses af det program, der skal læse det. Hvis jeg åbner filen i notepad og gemmer som UTF-8 så vil programmet godt læse filen.
Er der en mulighed for at få Access til at gemme i UTF-8 direkte så jeg ikke skal lave konverteringen med notepad ?

Kort fortalt: Det er en tekststreng jeg har i VBA der skal skrives til en fil, og filen skal være i UTF-8
Avatar billede hugopedersen Nybegynder
13. juni 2008 - 17:26 #1
Når jeg danner XML filer i min program til at lave ribbons til Access 2007 bruger jeg nedenstående. Hvis ikke jeg gør det på den måde, så kan den dannede XML ikke åbnes i Explorer.  Måske kan det også løse dit problem.

Public Const TristateTrue As Integer = -1

Dim strOutput_File As String
Dim fsObj
Dim fsFile

Set fsObj = CreateObject("Scripting.FileSystemObject")
Set fsFile = fsObj.OpenTextFile(strOutput_File, ForAppending, False, TristateTrue)
Avatar billede hugopedersen Nybegynder
13. juni 2008 - 17:26 #2
Public Const ForAppending As Integer = 8
Avatar billede kjulius Novice
24. juni 2008 - 02:29 #3
http://www.vovisoft.com/unicode/UniFunctions.htm

indeholder en del funktioner til konvertering mellem forskellige codepages, bl.a. UniStrToUTF8, som burde være det du søger.
Avatar billede kjulius Novice
24. juni 2008 - 02:42 #4
Siden http://www.nonhostile.com/howto-convert-byte-array-utf8-string-vb6.asp

viser en anden mulighed, som måske er lidt mere elegant
Avatar billede jpi Mester
01. juli 2008 - 09:24 #5
Jeg har afprøvet nogel forskellige funktioner og det virker ikke. Jeg får en masse mærkelig data ud, og det er måske også det som funktionerne skal komme med, men ikke det jeg kan bruge.
Det output jeg skal bruge svarer til det output der kommer når man i Notepad vælger "gem som" og så vælger UTF-8 som kodning.
Avatar billede hugopedersen Nybegynder
01. juli 2008 - 14:29 #6
Da jeg begyndte at bruge ovennævnte metode til a danne XML filer med kunne de pludselig vises i Internet Explorer. Jeg ved ikke om det er UTF8, men et eller andet må det gøre:-)
Avatar billede jpi Mester
01. juli 2008 - 14:52 #7
Jeg kan ikke gennemskue hvordan jeg skal bruge din metode...
lige nu har jeg en tekststreng som jeg lægger i en fil med "print #1, tekststreng".
Hvrdan skal jeg gøre med din metode ?
Avatar billede hugopedersen Nybegynder
01. juli 2008 - 15:34 #8
Jeg skal lige sende dig et eksempel senere.
Avatar billede kjulius Novice
03. juli 2008 - 22:38 #9
De to links jeg gav dig returnerer begge to en bytearray. Denne skal først konverteres til en streng. Dette kan f.eks. gøres i en rutine som denne:

Public Function ByteArr2String(Arr() As Byte) As String
    Dim x As Long
    Dim strUTF8 As String
    For x = LBound(Arr) To UBound(Arr)
        strUTF8 = strUTF8 & Chr(Arr(x))
    Next
    ByteArr2String = strUTF8
End Function

Din Print# sætning skal herefter se ud som følger (eksempel):

Print #1, ByteArr2String(ConvertStringToUtf8Bytes("<HTML><head><meta http-equiv=content-type content='text/html; charset=UTF-8'></head><body><H1>XYZÆØÅxyzæøå</H1></BODY></HTML>"))
Avatar billede hugopedersen Nybegynder
04. juli 2008 - 07:05 #10
Public Function fhpXML_Write(strFile_Name As String, strContent As String) As Integer
' -----------------------------------------------------------------------------------
' Purpose    : Write content in XML file
' Parameters :
' Returns    : Integer
' Created    : 04-07-2008
' Modified  :
' Remarks    :
' -----------------------------------------------------------------------------------
'On Error GoTo Error_fhpXML_Write
  Dim fsObj
  Dim fsFile
 
  Set fsObj = CreateObject("Scripting.FileSystemObject")
       
'First create file or open existing file
  If fhpFile_Exists(strFile_Name) = False Then
    Set fsFile = fsObj.CreateTextFile(strFile_Name, True, True)
  Else
    Set fsFile = fsObj.OpenTextFile(strFile_Name, ForAppending, False, TristateTrue)
  End If
'Then write content
  fsFile.Write strContent
 
  fsFile.Close

Exit_fhpXML_Write:
  Exit Function

Error_fhpXML_Write:
  Select Case Err.Number
    Case 3021
    Case 2501
    Case Is < 0
    Case Else
      MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'fhpXML_Write'"
  End Select
  Resume Exit_fhpXML_Write

End Function

Kald funktionen med f.eks. fhpXML_Write("c:\test.xml", "Dette er en test")
Avatar billede kjulius Novice
04. juli 2008 - 17:12 #11
--> hugopedersen: Så vidt jeg ved (og jeg kan sagtens være forkert på den), så vil din kode producere UTF-16 koderet tekst (Unicode). Det kan de fleste XML-parsere sagtens klare, men spørgeren efterlyser specifikt UTF-8 koderet tekst.
Avatar billede hugopedersen Nybegynder
07. juli 2008 - 06:50 #12
Det skal jeg ikke kunne sige om det er det ene eller andet UTF format, men som jeg startede med at sige 'Måske kan det også løse dit problem' = ingen garanti :-)
Avatar billede jpi Mester
16. juli 2008 - 11:48 #13
Begge virker fint. Så jeg vil gerne give jer begge point, dog synes jeg 15 er for lidt. Så den første får point og så opretter jeg et spm mere til den anden med 30 point.

Tak for hjælpen !
Avatar billede kjulius Novice
16. juli 2008 - 19:49 #14
Tak! - men så vidt jeg husker (det er ved at være længe side, jeg har brugt det), så kan du godt ændre i de antal point du giver/fordeler.
Avatar billede hugopedersen Nybegynder
16. juli 2008 - 21:00 #15
Det kan man også under 'Spørgsmål data' så vidt jeg erindrer
Avatar billede jpi Mester
17. juli 2008 - 08:22 #16
Tak, så lærte jeg også det idag :-)
30 point fordelt til hver
Avatar billede hugopedersen Nybegynder
17. juli 2008 - 16:44 #17
Jeg kan kun sige: tak :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester