![问题(示例)](https://linux22.com/image/550796/%E9%97%AE%E9%A2%98%EF%BC%88%E7%A4%BA%E4%BE%8B%EF%BC%89.png)
我有一个经典 ASP在工作站上运行的应用程序丹麦版 Windows 7和IIS 7.5。
问题:当应用程序将布尔值写入字符串时,它会在英语服务器上写出“True”或“False”。但是,在我的丹麦语安装中,它会写出“Sand”和“Falsk”。
期望的解决方案:我需要知道我的工作站/iis/配置上的哪个特定设置决定了它用哪种语言写出布尔值,以确保它始终用英语写出布尔值。
我已经尝试过以下操作:
- 将 IIS 的 ASP 配置的 LCID 设置为 2057 (en_GB)。
- 将控制面板中的设置更改为英语
- 区域设置
- 数字和货币格式
- 非 Unicode 程序的语言
- 更改了 IIS 中 ASP.NET 的文化设置
- 重新启动了工作站。
以下不是可能的解决方案,因此请不要建议这些:
- 更改应用程序中的任何代码。
- 用英文版 Windows 7 重新安装我的工作站。
- 更改我的 Windows 7 安装的语言(这是不可能的,因为我没有使用 Ultimate 并且不想升级)
任何建议都将受到赞赏。谢谢。
答案1
我不知道旧的 OLEAUT 区域设置黑客是否适用,但我认为值得一试 - 看看你会得到什么。
http://support.microsoft.com/kb/271587
SetVarConversionLocale 应设置为 2,并将默认区域设置设置为美国英语。
如果这不起作用,并且您无法更改应用程序中的代码,请运行带有美国英语操作系统的虚拟机。您没有特别排除这一点 :)
答案2
当您在控制面板中更改区域设置时,您是在针对用户配置文件执行此操作;但 IIS 工作进程通常在其他用户上下文中运行,具体取决于应用程序池的配置。您应该尝试更改这些帐户的区域设置。
答案3
注意:我还将此解决方案发布到了:https://stackoverflow.com/questions/15760035/boolean-values-in-local-language/44321629#44321629
你好,
我也被这个“问题”困扰过。事实上,这不是一个问题:
问题(示例)
在 SQL 语句中使用布尔数据时,我遇到了同样的问题。在我的法国服务器上,我的 SQL 语句如下:
<%
'Set my boolean value
Dim myBoolean
myBoolean = True
'Set my SQL Statement
Dim MySQLStatement
MySQLStatement = "SELECT * FROM MyTable WHERE MyBooleanField = " & myBoolean
'=> Here, as MySQLStatement is a STRING, the boolean data was "converted/rendered" as a localized string. So that leads to this output :
'=> SELECT * FROM MyTable WHERE MyBooleanField = Vrai
'Obviously, that SQL Statement is incorrect, because the SQL Engine does NOT understand what is the "Vrai" word - It should be "True" instead.
%>
解释:
- 您的 Windows 系统上设置了哪些区域设置并不重要:底层数据不会发生任何变化。布尔数据类型还是A布尔值、英语、法语、德语、俄语、泰语......或任何您想要的语言。
- 事实是,数据只是被渲染作为本地化细绳(如日期)。
解决方案
在阅读了大量论坛帖子后,解决方案不是更改 Windows 系统上的区域设置,也不是更改注册表项,也不是更改 Session.LCID,......绝对和仅限代码解决方案是将布尔值(True|False)转换为整数(0|1)。然后,这个整数将可以安全地用于字符串中,并且将保持 (0|1)。
这是安全的方法以非本地化形式使用/转换/呈现布尔值:使用整数值。
<%
'Set my boolean value
Dim myBoolean
myBoolean = True
'Set my SQL Statement
Dim MySQLStatement
MySQLStatement = "SELECT * FROM MyTable WHERE MyBooleanField = " & BoolToInt(myBoolean)
'=> Here, as MySQLStatement is a STRING, and as the boolean data was previously "converted/rendered" as an integer, we got this correct SQL Statement :
'=> SELECT * FROM MyTable WHERE MyBooleanField = 1
'This SQL Statement is correct, as the SQL Engine DOES understand that 1 is a boolean.
'This Function Returns an INTEGER value based on a BOOLEAN value
Function BoolToInt(v)
'@param v Boolean The Input Boolean Value to be converted to an Integer
'@return i_OUT Integer The Output Integer Value (0|1)
'Convert the input value to a Boolean
Dim b_v : b_v = CBool(v)
'Define the Output Integer value
Dim i_OUT
'If the Input Boolean value is a "True" boolean value (in any language)
if (b_v) then
i_OUT = CInt(1)
'If the Input value is a "False" boolean value (in any language)
else
i_OUT = CInt(0)
end if
'Return
BoolToInt = i_OUT
End Function 'BoolToInt
%>
我真心希望它能拯救你!