O IIS 7.5 usando o ASP clássico converte um valor booleano em uma string no idioma local

2

Eu tenho um aplicativo Classic ASP em execução em uma estação de trabalho com uma versão em dinamarquês do Windows 7 com IIS 7.5 .

O problema: Quando o aplicativo grava um booleano como uma string, ele escreve "True" ou "False" em um servidor em inglês. No entanto, na minha instalação dinamarquesa, ele irá escrever "Sand" e "Falsk".

A solução desejada: O que eu preciso é saber qual configuração específica na minha estação de trabalho / iis / configuration determina qual linguagem ela escreve um valor booleano para ter certeza de que sempre escreverá booleanos em inglês. .

Já tentei o seguinte:

  • Defina o LCID como 2057 (en_GB) para a configuração ASP do IIS.
  • Alterou as configurações no Painel de Controle para o inglês
    • Configurações regionais
    • Formatação de números e moedas
    • Idioma para programas não-Unicode
  • Alterou as configurações de cultura do ASP.NET no IIS
  • Reiniciou a estação de trabalho.

As seguintes resoluções não são possíveis, então, por favor, não sugira as seguintes:

  • Alterando qualquer código no aplicativo.
  • Reinstalando minha estação de trabalho com uma versão em inglês do Windows 7.
  • Alterando o idioma da minha instalação do Windows 7 (não é possível porque não estou usando o Ultimate e não desejo atualizar)

Qualquer sugestão será apreciada. Obrigado.

    
por Niels Brinch 29.05.2011 / 11:38

3 respostas

1

Eu não sei se o hack antigo das configurações regionais do OLEAUT se aplica, mas acho que vale a pena tentar - veja o que você obtém.

link

SetVarConversionLocale deve ser definido como 2 e as configurações regionais padrão definidas como inglês americano.

Se isso não funcionar e você não puder alterar o código em seu aplicativo, execute uma máquina virtual com um sistema operacional em inglês dos EUA. Você não excluiu especificamente isso:)

    
por 30.05.2011 / 01:41
0

Quando você altera as configurações regionais no painel de controle, você está fazendo isso para o seu perfil de usuário; mas o processo de trabalho do IIS geralmente é executado em outros contextos de usuário, dependendo da configuração do (s) pool (s) de aplicativos. Você deve tentar alterar as configurações regionais para essas contas.

    
por 30.05.2011 / 01:46
0

NOTA: também publiquei esta solução para: link

Oi,

Também fui "apanhado" com este "problema". De fato, isso não é um problema:

O PROBLEMA (EXEMPLO)

Eu tive o mesmo problema ao usar dados booleanos em uma instrução SQL. No meu servidor francês, minha instrução SQL era a seguinte:

<%
'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.
%>

AS EXPLICAÇÕES:

  • Não importa quais configurações regionais estão definidas no sistema do Windows: nada acontece com os dados subjacentes. Um tipo de dados booleano é STILL a BOOLEAN , em inglês, francês, alemão, russo, tailandês, ou qualquer outro idioma desejado.
  • O fato é que os dados estão sendo RENDERED como STRING > (como datas).

A SOLUÇÃO

Após muitas leituras em encadeamentos de fóruns, a solução não é alterar as configurações regionais no sistema Windows, nem alterar as chaves do Registro, nem alterar Session.LCID, ... A solução absoluta e somente de código é converter o valor booleano (True | False) em um Integer (0 | 1) . Então, este Integer será seguramente utilizável em uma string e permanecerá (0 | 1).

Aqui está o caminho seguro para usar / converter / renderizar um valor booleano em um formato não localizado: Use um valor Integer .

<%
'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
%>

Eu realmente espero que você salve o seu dia!

    
por 02.06.2017 / 07:47