使用经典ASP的IIS 7.5将布尔值转换为本地语言的string

我有一个经典的ASP应用程序运行在与IIS 7.5 丹麦语版本的Windows 7的工作站上。

问题:当应用程序将一个布尔值作为string写入时,它将在英文服务器上写入“True”或“False”。 但是,在我的丹麦装置上,它会写出“沙”和“Falsk”。

所需的解决scheme:我需要的是要知道我的工作站/ iis /configuration上的哪个特定设置确定哪个语言写出一个布尔值,以确保它总是用英语写出布尔值。

我已经尝试了以下内容:

  • 将LCID设置为2057(en_GB)以便IIS的ASPconfiguration。
  • 将控制面板中的设置更改为英文
    • 区域设置
    • 数字和货币格式
    • 非Unicode程序的语言
  • 在IIS中更改ASP.NET的文化设置
  • 重新启动工作站。

以下是不可能的决议,所以请不要build议这些:

  • 更改应用程序中的任何代码。
  • 用英文版的Windows 7重新安装我的工作站。
  • 改变我的Windows 7安装的语言(不可能,因为我没有使用终极,不希望升级)

任何build议将不胜感激。 谢谢。

我不知道旧的OLEAUT区域设置是否适用,但我认为值得一试 – 看看你得到了什么。

http://support.microsoft.com/kb/271587

SetVarConversionLocale应设置为2,默认的区域设置为美国英语。

如果这样做不起作用,并且无法更改应用程序中的代码,请运行带有美国英语操作系统的虚拟机。 你没有具体排除:)

当您在控制面板中更改区域设置时,您正在为您的用户configuration文件执行此操作; 但IIS工作进程通常在其他用户上下文中运行,具体取决于应用程序池的configuration。 您应该尝试更改这些帐户的区域设置。

注意:我也发布了这个解决scheme: 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系统上设置哪些区域设置无关紧要:底层数据没有任何变化。 布尔型数据types仍然BOOLEAN ,英文,法文,德文,俄文,泰文,或任何你想要的语言。
  • 事实是,数据只是作为一个本地化的STRING (像date) 呈现

解决scheme

经过大量的论坛线程阅读,解决scheme是不改变Windows系统的区域设置,也不改变registry项,也不改变Session.LCID,…绝对和代码的解决scheme是转换布尔值( True | False)为整数(0 | 1) 。 然后,这个整数将在一个string中安全可用,并将保持(0 | 1)。

下面是以非本地化的forms使用/转换/呈现布尔值的安全方法使用整数值

 <% '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) 'INPUT: 'v Boolean value 'OUTPUT: 'Integer (0|1) Dim b_OUT b_OUT = v 'If the Input value is a "True" boolean value (in any language) if (b_OUT = True) then BoolToInt = cint(1) 'If the Input value is a "False" boolean value (in any language) elseif (b_OUT = False) then BoolToInt = cint(0) end if End Function 'BoolToInt %> 

我真的希望它能拯救你的一天!