Determining if a string is Unicode
From: Jerry West (jw_at_comcast.net)
Date: 12/01/04
- Next message: Tony Proctor: "Re: How to declare a Const in ActiveX DLL"
- Previous message: Ulrich Korndoerfer: "Re: Array Dimensioned or not"
- Next in thread: Mike Williams: "Re: Determining if a string is Unicode"
- Reply: Mike Williams: "Re: Determining if a string is Unicode"
- Reply: Shell: "Re: Determining if a string is Unicode"
- Reply: Frank Adam: "Re: Determining if a string is Unicode"
- Reply: Bonj: "Re: Determining if a string is Unicode"
- Reply: Tony Proctor: "Re: Determining if a string is Unicode"
- Messages sorted by: [ date ] [ thread ]
Date: Wed, 1 Dec 2004 10:51:39 -0800
I have a strange issue I can't seem to get a handle on. I'm reading in an
INF file like so:
Public Function mP_GetFileText(sFileName As String, Optional bNoLock As
Boolean = True, Optional nStart As Long = 1) As String
Dim sText As String
Dim i As Integer
i% = FreeFile
If gFSO.FileExists(sFileName$) Then
If bNoLock Then Open sFileName$ For Binary Access Read Lock Write As
i% Else Open sFileName$ For Binary Access Read As i%
sText$ = String$(LOF(i%), 0)
Get i%, nStart&, sText$
Close i%
mP_GetFileText = sText$
End If
End Function
If the INF file is read from a NT based system it appears to be in Unicode.
Viewing the string in the watch window has every other char as a Null. If I
then perform this operation on it it then it appears as a "normal"
(non-Unicode) string:
sString$ = StrConv(sString, vbFromUnicode)
Now, if I read in the INF file from a 9x based computer the string does not
appear to be in Unicode. Further, if I perform the StrConv operation on this
string it changes the entire string to all question marks.
This left me with attempting to determine whether or not the INF file read
is in Unicode or not. First I tried examining the VarType() value. However
for either type of string returned the value was always an 8 (8 = string).
Clearly both types of strings are NOT the same so this seems odd to me. I
clearly cannot perform the StrConv function on the already "normal" string
w/o changing it to all question marks. I then thought I'd try to read the
files in using a different method like so:
mP_GetFileText = gFSO.OpenTextFile(sFileName$, ForReading,
TristateFalse).ReadAll
This also failed. No matter what Tristate value I would use the string
returned was always Null chars IF the INF file being read was on a remote 9x
or NT system. It would work OK when reading local files. Finally, I tried
creating a function that would return True if the string was Unicode like
so:
Dim l As Long
Dim sa() As Byte
On Error GoTo ErrHandler
sa = sString$
If (UBound(v) > -1) Then
For l& = 1 To UBound(sa) Step 2
If (sa(l&) <> 0) Then Exit For
Next l&
mP_IsStringNonEnglishUnicode = (l& < UBound(sa))
End If
This also would not properly detect that the "normal" string was non-Unicode
(if that is what it is).
Has anyone else seen this type of issue before? Is there a way to detect the
difference between these two string types? I'm not even certain that the
string read from the NT based system is in Unicode at this point. Does
anyone have any comments to share on this situation?
Thanks!
JW
- Next message: Tony Proctor: "Re: How to declare a Const in ActiveX DLL"
- Previous message: Ulrich Korndoerfer: "Re: Array Dimensioned or not"
- Next in thread: Mike Williams: "Re: Determining if a string is Unicode"
- Reply: Mike Williams: "Re: Determining if a string is Unicode"
- Reply: Shell: "Re: Determining if a string is Unicode"
- Reply: Frank Adam: "Re: Determining if a string is Unicode"
- Reply: Bonj: "Re: Determining if a string is Unicode"
- Reply: Tony Proctor: "Re: Determining if a string is Unicode"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|