MultiByteToWideChar: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
 
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
 
Die API-Funktion [[MultiByteToWideChar]] konvertiert einen einbyte/mehrbyte-Character-String in einen Wide-Character-Unicodestring der Kodierung UTF16.
 
Die API-Funktion [[MultiByteToWideChar]] konvertiert einen einbyte/mehrbyte-Character-String in einen Wide-Character-Unicodestring der Kodierung UTF16.
  
<code vb>
+
<syntaxhighlight lang="vb">
  
 
Declare Function MultiByteToWideChar lib "kernel32.dll" ( _
 
Declare Function MultiByteToWideChar lib "kernel32.dll" ( _
 
                 ByVal CodePage As Long, _
 
                 ByVal CodePage As Long, _
 
                 ByVal dwFlags As Long, _
 
                 ByVal dwFlags As Long, _
                 ByRef lpMultiByteStr As Byte, _
+
                 ByVal lpMultiByteStr As Long, _
 
                 ByVal cbMultiByte As Long, _
 
                 ByVal cbMultiByte As Long, _
 
                 ByVal lpWideCharStr As Long, _
 
                 ByVal lpWideCharStr As Long, _
 
                 ByVal cchWideChar As Long) As Long
 
                 ByVal cchWideChar As Long) As Long
  
</code>
+
</syntaxhighlight>
  
  
Zeile 19: Zeile 19:
 
''CodePage''
 
''CodePage''
 
:Die Codepage, die bei der Konversion verwendet werden soll. Es kann jede im System installierte Codepage verwendet werden oder eine aus der folgenden Liste. Die Liste ist nicht vollständig; sie zeigt nur mögliche Werte:
 
:Die Codepage, die bei der Konversion verwendet werden soll. Es kann jede im System installierte Codepage verwendet werden oder eine aus der folgenden Liste. Die Liste ist nicht vollständig; sie zeigt nur mögliche Werte:
<code vb>
+
<syntaxhighlight lang="vb">
 
Private Const CP_ACP        As Long = 0    ' ANSI Code Page
 
Private Const CP_ACP        As Long = 0    ' ANSI Code Page
 
Private Const CP_OEMCP      As Long = 1    ' OEM Code page
 
Private Const CP_OEMCP      As Long = 1    ' OEM Code page
Zeile 31: Zeile 31:
 
' Die Werte der Konstanten kann man auch in der Regions-Einstellung nachlesen.
 
' Die Werte der Konstanten kann man auch in der Regions-Einstellung nachlesen.
 
' siehe: Systemsteuerung->Regions und Sprachoptionen->Erweitert->Codepagekonvertierungstabelle
 
' siehe: Systemsteuerung->Regions und Sprachoptionen->Erweitert->Codepagekonvertierungstabelle
</code>
+
</syntaxhighlight>
 
für eine komplette Liste siehe [http://msdn.microsoft.com/en-us/library/ms776446(VS.85).aspx Code Page Identifiers]
 
für eine komplette Liste siehe [http://msdn.microsoft.com/en-us/library/ms776446(VS.85).aspx Code Page Identifiers]
  
 
''dwFlags''
 
''dwFlags''
 
:Es kann eine Kombination aus folgenden Flags verwendet werden. [[MB_PRECOMPOSED]] und [[MB_COMPOSITE]] können jedoch nicht zusammen verwendet werden.
 
:Es kann eine Kombination aus folgenden Flags verwendet werden. [[MB_PRECOMPOSED]] und [[MB_COMPOSITE]] können jedoch nicht zusammen verwendet werden.
<code vb>
+
<syntaxhighlight lang="vb">
 
Private Const MB_NOFLAGS          As Long = &H0 ' es werden keine Flags verwendet
 
Private Const MB_NOFLAGS          As Long = &H0 ' es werden keine Flags verwendet
 
Private Const MB_PRECOMPOSED      As Long = &H1 ' Always use precomposed characters — that is, characters in
 
Private Const MB_PRECOMPOSED      As Long = &H1 ' Always use precomposed characters — that is, characters in
Zeile 53: Zeile 53:
 
                                                 ' it fails and GetLastError liefert  
 
                                                 ' it fails and GetLastError liefert  
 
                                                 ' ERROR_NO_UNICODE_TRANSLATION.
 
                                                 ' ERROR_NO_UNICODE_TRANSLATION.
</code>
+
</syntaxhighlight>
  
 
''lpMultiByteStr''
 
''lpMultiByteStr''
Zeile 68: Zeile 68:
 
Anmerkung: Die zurückgegebene Länge enthält ein Null-Terminierungszeichen.
 
Anmerkung: Die zurückgegebene Länge enthält ein Null-Terminierungszeichen.
  
Null deutet auf einen Fehler hin. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie [[GetLastError]] auf (in VBC: [[Err.LastDllError]]).  
+
Null deutet auf einen Fehler hin. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie [[GetLastError]] auf (in VBC: [[Err.LastDLLError]]).  
 
Mögliche Werte für [[GetLastError]]:
 
Mögliche Werte für [[GetLastError]]:
<code vb>
+
<syntaxhighlight lang="vb">
 
Private Const ERROR_INVALID_PARAMETER      As Long = 87
 
Private Const ERROR_INVALID_PARAMETER      As Long = 87
 
Private Const ERROR_INSUFFICIENT_BUFFER    As Long = 122
 
Private Const ERROR_INSUFFICIENT_BUFFER    As Long = 122
 
Private Const ERROR_INVALID_FLAGS          As Long = 1004&
 
Private Const ERROR_INVALID_FLAGS          As Long = 1004&
 
Private Const ERROR_NO_UNICODE_TRANSLATION As Long = 1113&
 
Private Const ERROR_NO_UNICODE_TRANSLATION As Long = 1113&
</code>
+
</syntaxhighlight>
 
Anmerkungen:
 
Anmerkungen:
  
Zeile 85: Zeile 85:
  
 
Der Fehler [[ERROR_INSUFFICIENT_BUFFER]] tritt auf, wenn der Puffer, in den hineingeschrieben werden soll, nicht die erforderliche Länge aufweist.
 
Der Fehler [[ERROR_INSUFFICIENT_BUFFER]] tritt auf, wenn der Puffer, in den hineingeschrieben werden soll, nicht die erforderliche Länge aufweist.
 +
 
==Beispiel==
 
==Beispiel==
 
[http://www.activevb.de/rubriken/faq/faq0155.html FAQ 0155: Wie konvertiere ich eine VB-Zeichenkette nach UTF-8 oder zurück?]
 
[http://www.activevb.de/rubriken/faq/faq0155.html FAQ 0155: Wie konvertiere ich eine VB-Zeichenkette nach UTF-8 oder zurück?]
Zeile 97: Zeile 98:
 
*Windows XP
 
*Windows XP
 
*Windows Vista
 
*Windows Vista
 +
 +
==Verwandte Funktionen==
 +
 +
[[Api1]] - MultiByteToWideChar<br>
 +
[[Api2]] - Beschreibung
 +
 +
==Verweise==
 +
 +
*[http://support.microsoft.com/?kbid=151774 ''Microsoft Knowledge-Base KB151774'' - HOWTO: Call NetUserGetInfo from Visual Basic] <br>
 +
Unicode Functions
 +
WideCharToMultiByte
  
 
==Quellen==
 
==Quellen==
  
 
*[http://msdn.microsoft.com/en-us/library/ms776415.aspx Unicode and Character Set Functions]
 
*[http://msdn.microsoft.com/en-us/library/ms776415.aspx Unicode and Character Set Functions]
*[http://msdn.microsoft.com/en-us/library/ms776413.aspx WideCharToMultiByte]
+
*[http://msdn.microsoft.com/en-us/library/ms776413.aspx MultiByteToWideChar]
  
 
[[Kategorie:kernel]]
 
[[Kategorie:kernel]]
 
[[Kategorie:System]]
 
[[Kategorie:System]]

Aktuelle Version vom 7. Oktober 2016, 22:23 Uhr

Die API-Funktion MultiByteToWideChar konvertiert einen einbyte/mehrbyte-Character-String in einen Wide-Character-Unicodestring der Kodierung UTF16.

Declare Function MultiByteToWideChar lib "kernel32.dll" ( _
                 ByVal CodePage As Long, _
                 ByVal dwFlags As Long, _
                 ByVal lpMultiByteStr As Long, _
                 ByVal cbMultiByte As Long, _
                 ByVal lpWideCharStr As Long, _
                 ByVal cchWideChar As Long) As Long


Parameter

CodePage

Die Codepage, die bei der Konversion verwendet werden soll. Es kann jede im System installierte Codepage verwendet werden oder eine aus der folgenden Liste. Die Liste ist nicht vollständig; sie zeigt nur mögliche Werte:
Private Const CP_ACP        As Long = 0     ' ANSI Code Page
Private Const CP_OEMCP      As Long = 1     ' OEM Code page
Private Const CP_MACCP      As Long = 2     '
Private Const CP_THREAD_ACP As Long = 3     '
Private Const CP_SYMBOL     As Long = 42    '
Private Const CP_ISO8859_4  As Long = 28594 ' Baltisch
Private Const CP_ISO8859_15 As Long = 28605 ' Lateinisch 9
Private Const CP_UTF7       As Long = 65000 ' UTF-7 code page
Private Const CP_UTF8       As Long = 65001 ' UTF-8 code page
' Die Werte der Konstanten kann man auch in der Regions-Einstellung nachlesen.
' siehe: Systemsteuerung->Regions und Sprachoptionen->Erweitert->Codepagekonvertierungstabelle

für eine komplette Liste siehe Code Page Identifiers

dwFlags

Es kann eine Kombination aus folgenden Flags verwendet werden. MB_PRECOMPOSED und MB_COMPOSITE können jedoch nicht zusammen verwendet werden.
Private Const MB_NOFLAGS           As Long = &H0 ' es werden keine Flags verwendet
Private Const MB_PRECOMPOSED       As Long = &H1 ' Always use precomposed characters — that is, characters in
                                                 ' which a base character and a nonspacing character have a
                                                 ' single character value. This is the default translation 
                                                 ' option. Cannot be used with MB_COMPOSITE.

Private Const MB_COMPOSITE         As Long = &H2 ' Always use composite characters — that is, characters in
                                                 ' which a base character and a nonspacing character have
                                                 ' different character values. 
                                                 ' Cannot be used with MB_PRECOMPOSED.

Private Const MB_USEGLYPHCHARS     As Long = &H4 ' Use glyph characters instead of control characters

Private Const MB_ERR_INVALID_CHARS As Long = &H8 ' Wenn die Funktion auf ein ungültiges Zeichen stößt,
                                                 ' it fails and GetLastError liefert 
                                                 ' ERROR_NO_UNICODE_TRANSLATION.

lpMultiByteStr

[in] Zeiger auf die 8-Bit-Zeichenfolge, die konvertiert werden soll.

cbMultiByte

[in] Größe, in Bytes, der 8-Bit-Zeichenfolge, die konvertiert werden soll. Wenn hier -1 angegeben wird und der String mit einem Nullzeichen terminiert ist, so wird die Länge automatsich ermittelt.

lpWideCharStr

[out] Zeiger auf einen Puffer, der den übersetzten UTF-16-String empfängt.

cchWideChar

[in] Größe, in Wide-Characters, des Puffers, der den übersetzten UTF-16-String enthält. Wenn hier 0 übergeben wird, liefert die Funktion die erforderliche Größe in UTF-16-Codeeinheiten zurück, ohne die Übersetzung durchzuführen.

Rückgabe

Anzahl der UTF-16-Codeeinheiten, die in den Puffer geschrieben wurden, wenn die Funktion erfolgreich war und cchWideChar <> 0 ist. Anmerkung: Die zurückgegebene Länge enthält ein Null-Terminierungszeichen.

Null deutet auf einen Fehler hin. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf (in VBC: Err.LastDLLError). Mögliche Werte für GetLastError:

Private Const ERROR_INVALID_PARAMETER      As Long = 87
Private Const ERROR_INSUFFICIENT_BUFFER    As Long = 122
Private Const ERROR_INVALID_FLAGS          As Long = 1004&
Private Const ERROR_NO_UNICODE_TRANSLATION As Long = 1113&

Anmerkungen:

Der Fehler ERROR_INVALID_PARAMETER tritt auf, wenn lpMultiByteStr und lpWideCharStr auf den gleichen Speicherbereich zeigen.

Der Fehler ERROR_NO_UNICODE_TRANSLATION tritt auf wenn das Flag MB_ERR_INVALID_CHARS gesetzt ist und wenn der Quellstring ein ungültiges Zeichen enthält. Ein ungültiges Zeichen ist ein führendes (leading) Byte, dass kein folgendes (trail) Byte besitzt. Wenn MB_ERR_INVALID_CHARS nicht gesetzt ist wird ein ungültiges Zeichen in ein Defaultzeichen übersetzt.

Der Fehler ERROR_INSUFFICIENT_BUFFER tritt auf, wenn der Puffer, in den hineingeschrieben werden soll, nicht die erforderliche Länge aufweist.

Beispiel

FAQ 0155: Wie konvertiere ich eine VB-Zeichenkette nach UTF-8 oder zurück?

Betriebssystem

Die Funktion ist unter folgenden Betriebssystemen funktionsfähig:

  • Windows 95 mit Unicodeerweiterung
  • Windows 98 mit Unicodeerweiterung
  • Windows NT 3.1 und später
  • Windows 2000
  • Windows XP
  • Windows Vista

Verwandte Funktionen

Api1 - MultiByteToWideChar
Api2 - Beschreibung

Verweise

Unicode Functions WideCharToMultiByte

Quellen