WebアプリケーションをWindows2008vpsから専用のWindows2008vps(両方とも32ビット版)に移行しようとしています。私が気付いた問題(そして私は今のところ24時間以上それと戦ってきました)は、ほとんどのテキストが文字化けした形で来ることです(そしてこれはすべてのアプリケーションを台無しにします)。アプリは次のように機能します:(html + js)-> php-> vb6dll->reply。
当初、私はそれがエンコーディングと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であり、実験しているこのマシンがsp1であったため、SP2の問題である可能性があると考えました。更新しましたが、残念ながら結果はありません。
strconv()が正常に機能しない理由がわかりません。設定やインストールに何かが足りないのかもしれません。任意のアイデアをいただければ幸いです。
psiis5を搭載したWindowsXP開発マシンでも正しく動作します。