/ Forside/ Teknologi / Udvikling / VB/Basic / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Convert fra ANSI to UTF-8
Fra : kimsv
Vist : 589 gange
20 point
Dato : 25-08-04 09:39

Jeg har brug for en funktion som konvertere en fil/string fra ANSI til UTF-8

Jeg har prøvet følgende kode

Set ByteArray = CreateObject("ScriptUtils.ByteArray")
ByteArray.ReadFrom "some-windows-1250-file.txt"

'Set right code page for the bytearray
ByteArray.CharSet = "windows-1250"

'Convert the data to a destination code page and save them to a second file
ByteArray.CharSetConvert("utf-8").SaveAs "utf-8-output.txt"


Problemet er at jeg ikke kan oprette objektet "ScriptUtils.ByteArray" fordi jeg ikke har den .dll

Der der nogle som har et kode eksempel på en anden metode til at konvertere en string fra ANSI til utf-8 i VB

På forhånd tak

Kim

 
 
Accepteret svar
Fra : CADmageren

Modtaget 30 point
Dato : 25-08-04 10:24

Hej Kim

Prøv at se om du kan bruge nedenstående:
Const NERR_Success = 0
Private Const NERR_BASE = 2100
Private Const NERR_InvalidComputer = (NERR_BASE + 251)
Private Const NERR_UseNotFound = (NERR_BASE + 150)
Const CP_ACP = 0
Private Type USER_INFO_3
usri3_name As Long
usri3_password As Long
usri3_password_age As Long
usri3_priv As Long
usri3_home_dir As Long
usri3_comment As Long
usri3_flags As Long
usri3_script_path As Long
usri3_auth_flags As Long
usri3_full_name As Long
usri3_usr_comment As Long
usri3_parms As Long
usri3_workstations As Long
usri3_last_logon As Long
usri3_last_logoff As Long
usri3_acct_expires As Long
usri3_max_storage As Long
usri3_units_per_week As Long
usri3_logon_hours As Byte
usri3_bad_pw_count As Long
usri3_num_logons As Long
usri3_logon_server As String
usri3_country_code As Long
usri3_code_page As Long
usri3_user_id As Long
usri3_primary_group_id As Long
usri3_profile As Long
usri3_home_dir_drive As Long
usri3_password_expired As Long
End Type
Private Declare Function NetUserGetInfo Lib "netapi32" (lpServer As Any, UserName As Byte, ByVal Level As Long, lpBuffer As Long) As Long
Private Declare Function NetApiBufferFree Lib "netapi32" (ByVal Buffer As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)
Private Declare Function lstrlenW Lib "kernel32" (lpString As Any) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal codepage As Long, ByVal dwFlags As Long, lpWideCharStr As Any, ByVal cchWideChar As Long, lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
' Returns an ANSI string from a pointer to a Unicode string.
Public Function GetStrFromPtrW(lpszW As Long) As String
Dim sRtn As String
sRtn = String$(lstrlenW(ByVal lpszW) * 2, 0) ' 2 bytes/char
' WideCharToMultiByte also returns Unicode string length
Call WideCharToMultiByte(CP_ACP, 0, ByVal lpszW, -1, ByVal sRtn, Len(sRtn), 0, 0)
GetStrFromPtrW = GetStrFromBufferA(sRtn)
End Function
' Returns the string before first null char encountered (if any) from an ANSII string.
Public Function GetStrFromBufferA(sz As String) As String
If InStr(sz, vbNullChar) Then
GetStrFromBufferA = Left$(sz, InStr(sz, vbNullChar) - 1)
Else
' If sz had no null char, the Left$ function
' above would return a zero length string ("").
GetStrFromBufferA = sz
End If
End Function
Private Sub Form_Load()
'KPD-Team 2001
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim lpBuf As Long
Dim ui3 As USER_INFO_3
' replace "Administrator" with a valid NT username
Dim bServer() As Byte, bUsername() As Byte
bServer = "" & vbNullChar
bUsername = "Administrator" & vbNullChar
If (NetUserGetInfo(bServer(0), bUsername(0), 3, lpBuf) = NERR_Success) Then
Call MoveMemory(ui3, ByVal lpBuf, Len(ui3))
MsgBox GetStrFromPtrW(ui3.usri3_name)
MsgBox GetStrFromPtrW(ui3.usri3_comment)
Call NetApiBufferFree(ByVal lpBuf)
End If
End Sub

Mvh
www.cadmgeren.dk

Michael Christoffersen


Kommentar
Fra : kimsv


Dato : 25-08-04 12:06

Tak Michael
Det virker.

Med venlig hilsen

kimsv

Kommentar
Fra : CADmageren


Dato : 25-08-04 12:42



Så må du jo lukke spørgsmålet er tilføje multimange point mig - jubiiii



Godkendelse af svar
Fra : kimsv


Dato : 26-08-04 13:36

Tak for svaret til CADmageren.

Der skulle lige en omskrivning til men så kunne det bruge.

kimsv                        

Kommentar
Fra : CADmageren


Dato : 26-08-04 14:32

Hej Kim

Jeg vil anbefale API guiden, som indeholder rigtig god dokumentation og mange eksempler på API kald.
Det har sparet mig for mange timers arbejde, og så er det forøvrigt gratis.

http://www.mentalis.org/agnet/apiguide.shtml

Af ren nysgerrighed... Hvad arbejder du med?

/ Michael Christoffersen.


Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste