use*_*591 0 delphi delphi-7 internationalization
我的程序是用Delphi 7编写的,我想避免俄语或中文,韩语尝试使用我的软件,因为文件路径包含Unicode字符,我的程序无法处理它们(只要我不在我的程序上移植我的程序)新的Delphi版本支持UNICODE).
如何在Delphi 7中编写检测"Unicode语言"的函数?
Delphi 7程序(在其VCL部分中)可以毫无问题地处理俄语,中文或韩语字符.
如果正确设置了Windows系统语言,则字符集将匹配相应的编码,并且文件名将能够具有此字符集中可用的Unicode字符.实际上,string=AnsiString当VCL调用Windows API时,默认值将转换为Unicode(所有....A()调用都将执行转换,然后调用....W()版本).
您可以强制 默认代码页通过调用代码(其中一个将选择字符集被使用)这样的:
if GetThreadLocale<>LCID then // force locale settings if different
if SetThreadLocale(LCID) then
GetFormatSettings; // resets all locale-specific variables
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当前系统字符集中的TFileName(= AnsiString)将由Windows转换为相应的Unicode字符,您将能够在Delphi 7应用程序中使用它.
由于新的默认范例,自Delphi 2009以来,标准VCL AnsiString无法用它来直接混合字符集string = UnicodeString.
PS:
由于CharSet只涉及#128 ..#255 chars(即所有第7位设置),如果只使用#0 ..#127 chars,无论当前的字符集/代码页设置是什么,你的字符串都是一致的.如果你只使用英文字符和数字,你的路径将始终有效,无论字符集/代码页是什么.但是,如果使用非英语字符,则路径仅在正确设置字符集/代码页时才有效,这是最终用户使用的路径(TOpenDialog例如,在运行时使用).