String ASP经典会话字符串正在取消连接

String ASP经典会话字符串正在取消连接,string,vbscript,asp-classic,String,Vbscript,Asp Classic,我遇到了一个关于ASP classic中字符串行为的难题 代码从会话中提取一些值,然后尝试将它们用作字符串 问题是该值以某种方式取消了字符串连接 Dim testVar testVar = session("test") <- this value is "aaa" response.write "XXX - " & testVar & " - XXX" Dim testVar testVar=session(“test”)如果字符串末尾有空字符,您将看到StrComp的

我遇到了一个关于ASP classic中字符串行为的难题

代码从会话中提取一些值,然后尝试将它们用作字符串

问题是该值以某种方式取消了字符串连接

Dim testVar
testVar = session("test") <- this value is "aaa"
response.write "XXX - " & testVar & " - XXX"
Dim testVar

testVar=session(“test”)如果字符串末尾有空字符,您将看到StrComp的
行为;这也会阻止后续的连接

Dim testVar
testVar = session("test") <- this value is "aaa"
response.write "XXX - " & testVar & " - XXX"
您可以通过查看
ascw(右(testVar,1))=0

切掉它:
testVar=left(testVar,len(testVar)-1)

>> For Each s In Array("AB", "A" & Chrw(0))
>>     s = "XXX - " & s & " - XXX"
>>     WScript.Echo Len(s), s
>> Next
>>
14 XXX - AB - XXX
14 XXX - A
ChrW(0)s既不取消也不阻止连接。显示问题是由VBScript IO方法的特殊性引起的

如果您有一个地方/一段代码用于获取或显示testVar(您可能应该这样做),那么

我们应该做到这一点

证据:

>> For Each s In Array("AB", "A" & Chrw(0))
>>     s = "XXX - " & s & " - XXX"
>>     s = Replace(s, ChrW(0), "")
>>     WScript.Echo Len(s), s
>> Next
>>
14 XXX - AB - XXX
13 XXX - A - XXX
进一步的思考:

Option Explicit

Const csFSpec = ".\29988189.data"

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")

Dim sData : sData    = "Danger" & ChrW(0) & " Will Robinson!"
Dim tsIO  : Set tsIO = goFS.CreateTextFile(csFSpec)
tsIO.WriteLine sData
tsIO.Close
sData = goFS.OpenTextFile(csFSpec).ReadLine()
WScript.Echo Len(sData), Replace(sData, ChrW(0), ",")
输出:

cscript 29988189.vbs
22 Danger, Will Robinson!

好的,这就成功了,但是现在我想知道为什么要添加这个空字符?这是因为我们将一个旧应用程序从Win 2003服务器移动到了Win 2008。无论将
会话(“测试”)
分配到何处,可能都会在某些COM调用中发生这种情况。没有代码更改,所以服务器更改会导致这种情况,这很奇怪,不是吗?我想你不知道如何跟踪类似的情况?如果我找不到全局设置,它将需要大量代码更改。跟踪会话变量的分配方式/分配内容,问题就会出现