我正在尝试将 Web 应用程序从 windows 2008 vps 迁移到专用的 windows 2008 vps(均为 32 位版本)。我注意到的问题(到目前为止,我已经与它斗争了超过 24 小时)是大多数文本都以乱码形式出现(这会破坏所有应用程序)。该应用程序的工作方式如下:(html+js) -> php -> vb6 dll -> 回复。
最初我认为这一定是编码和 iis 的问题,但我认为情况并非如此。我将问题缩小到这个:
当调用 .dll 的函数时,函数的字符串参数首先被解析并转换为 vb6 正确格式:
Public Function getCorrectStringNoTrans(ByVal strWord As String) As String
If strWord <> "" Then
If isUTF8 = False Then
strWord = Trim$(strWord)
Else
Open "c:\log.txt" For Output As #1
Dim lol As Integer
For lol = 1 To Len(strWord)
Print #1, "bef:" & lol & ":" & Mid$(strWord, lol, 1) & ":" & AscW(Mid$(strWord, lol, 1)) & ":" & Asc(Mid$(strWord, lol, 1))
Next lol
strWord = StrConv(strWord, vbFromUnicode)
For lol = 1 To Len(strWord)
Print #1, "aft:" & lol & ":" & Mid$(strWord, lol, 1) & ":" & AscW(Mid$(strWord, lol, 1)) & ":" & Asc(Mid$(strWord, lol, 1))
Next lol
inData = strWord
Dim c As New crc
Dim lll As Long
lll = UBound(inData)
Print #1, c.CRC32(inData, lll)
Close #1
strWord = Trim$(ConvertUtf8BytesToString(inData))
'''strWord = Replace$(Trim$(ConvertUtf8BytesToString(inData)), "\'", "'")
End If
End If
getCorrectStringNoTrans = strWord
End Function
因此,在现场机器 1(当前运行正常的机器)中,特定字符串的输出是(最后一个数字是 crc 检查):
bef:1:Ξ:926:206
bef:2:Ί:906:186
bef:3:Ξ:926:206
bef:4:±:177:177
bef:5:Ξ:926:206
bef:6:»:187:187
bef:7:Ο:927:207
bef:8::140:140
bef:9:Ο:927:207
bef:10:‚:8218:130
aft:1:?:-17714:63
aft:2:?:-20018:63
aft:3:?:-17458:63
aft:4:?:-29489:63
aft:5:?:-32049:63
1958248078
但在新机器中,输出为:
bef:1:Ξ:926:206
bef:2:Ί:906:186
bef:3:Ξ:926:206
bef:4:±:177:177
bef:5:Ξ:926:206
bef:6:»:187:187
bef:7:Ο:927:207
bef:8::140:140
bef:9:Ο:927:207
bef:10:‚:8218:130
aft:1:?:16191:63
aft:2:?:-20161:63
aft:3:?:-17601:63
aft:4:?:16191:63
aft:5:?:-32193:63
523875602
所以 ascw() 表明字符串在我试图迁移到的新机器中的 strconv() 之后变得混乱。
我已经三重检查了控制面板中的设置-> 区域和语言选项,并且两台机器的所有设置都相同:
格式选项卡:当前格式:希腊语
位置标签:当前位置:希腊
管理选项卡:非 unicode 程序的语言:希腊语
然后我认为这可能是 SP2 的问题,因为正常工作的机器是 sp2,而我正在试验的这台机器是 sp1,所以我更新了,但唉,没有结果。
我不明白为什么 strconv() 不能正常工作。也许我在设置或安装中遗漏了一些东西。任何想法将不胜感激。
ps它也可以在带有iis5的windows xp开发机器中正常工作。