鉴于:
使用旧COM库的ASP.NET应用程序
未使用unicode(mbcs)构建的旧COM库
运行它的Windows 2008 Dev服务器
需要:
支持不同地区的Web应用程序用户
测试:
1)我将服务器上的系统区域设置为俄语,并测试俄语输入。
.NET将它们视为UTF16,将其作为BSTR传递给COM,COM使用convertBStortString和当前区域设置(俄语)将其转换为char*,将它们写入文件,将它们读取到文件,传回.NET并获得正确的结果。
2)我将系统区域设置回US/English,向ASP.NET应用程序或COM本身添加代码,将区域设置显式设置为俄语,区域设置成功(我查询并返回俄语),COM接收UTF-16 BSTR,使用convertbsertostring将其转换为char*并获取问号“???”!
为什么??在整个系统范围内设置区域设置和在进程中调用setlocale()有什么区别?那么setlocale的意义是什么呢?convertbsttoString是否使用了当前区域设置以外的内容?
我也试过做
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("ru-RU");
在COM对象的ASP.NET调用程序中,尝试执行
setlocale(LC_ALL, "Russian");
SetThreadLocale(
MAKELCID(MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN_RUSSIA), SORT_DEFAULT));
在COM库中的setLocale()旁边;没有效果。
我真的很感谢你提供的信息!