Назад | Перейти на главную страницу

IIS 7.5 с использованием классического ASP преобразует логическое значение в строку на местном языке.

у меня есть Классический ASP приложение, работающее на рабочей станции с Датская версия Windows 7 с участием IIS 7.5.

Эта проблема: Когда приложение записывает логическое значение в виде строки, оно будет писать «True» или «False» на английском сервере. Однако на моей датской установке будет написано «Sand» и «Falsk».

Желаемое решение: Что мне нужно, так это знать, какая конкретная настройка на моей рабочей станции / iis / configuration определяет, на каком языке записывается логическое значение, чтобы гарантировать, что он всегда будет записывать логические значения на английском языке.

Я уже пробовал следующее:

Следующие варианты решения невозможны, поэтому не предлагайте их:

Любые предложения будут оценены. Спасибо.

Я не знаю, применим ли старый хак с региональными настройками OLEAUT, но я думаю, что стоит попробовать - посмотрите, что у вас получится.

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

SetVarConversionLocale должен иметь значение 2, а региональные настройки по умолчанию - американский английский.

Если это не сработает и вы не можете изменить код в своем приложении, запустите виртуальную машину с ОС на английском языке (США). Вы специально этого не исключали :)

ПРИМЕЧАНИЕ. Я также разместил это решение в: 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: ничего не происходит с базовыми данными. Логический тип данных все еще а BOOLEAN, на английском, французском, немецком, русском, тайском ... или любом другом языке.
  • Дело в том, что данные просто ПРЕДОСТАВЛЯЕТСЯ как локализованный STRING (например, даты).

РЕШЕНИЕ

После долгого чтения веток форумов, решение состоит не в изменении региональных настроек в системе 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)
    '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
%>

Я очень надеюсь, что это спасет тебе день!

Когда вы меняете региональные настройки в панели управления, вы делаете это для своего профиля пользователя; но рабочий процесс IIS обычно выполняется в других пользовательских контекстах, в зависимости от конфигурации пула (ов) приложений. Вам следует попробовать изменить региональные настройки для этих учетных записей.