问题(示例)

问题(示例)

我有一个经典 ASP在工作站上运行的应用程序丹麦版 Windows 7IIS 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
%>

我真心希望它能拯救你!

相关内容