Переглянути джерело

Bug 1447: UTF-16 script files cannot be loaded

https://winscp.net/tracker/1447

Source commit: 22dccaf23b6e5c38838ae3db5cc9e43c936a670a
Martin Prikryl 9 роки тому
батько
коміт
ec3e821379
3 змінених файлів з 12 додано та 1 видалено
  1. 10 1
      source/core/Common.cpp
  2. 1 0
      source/resource/TextsCore.h
  3. 1 0
      source/resource/TextsCore1.rc

+ 10 - 1
source/core/Common.cpp

@@ -3478,7 +3478,16 @@ UnicodeString __fastcall AssemblyNewClassInstanceEnd(TAssemblyLanguage Language,
 //---------------------------------------------------------------------------
 void __fastcall LoadScriptFromFile(UnicodeString FileName, TStrings * Lines)
 {
-  Lines->LoadFromFile(ApiPath(FileName), TEncoding::UTF8);
+  std::auto_ptr<TFileStream> Stream(new TFileStream(ApiPath(FileName), fmOpenRead | fmShareDenyWrite));
+  Lines->DefaultEncoding = TEncoding::UTF8;
+  try
+  {
+    Lines->LoadFromStream(Stream.get());
+  }
+  catch (EEncodingError & E)
+  {
+    throw ExtException(LoadStr(TEXT_FILE_ENCODING), &E);
+  }
 }
 //---------------------------------------------------------------------------
 UnicodeString __fastcall StripEllipsis(const UnicodeString & S)

+ 1 - 0
source/resource/TextsCore.h

@@ -452,6 +452,7 @@
 #define CODE_CONNECT            551
 #define CODE_PS_ADD_TYPE        553
 #define COPY_INFO_PRESERVE_TIME_DIRS 554
+#define TEXT_FILE_ENCODING      555
 
 #define CORE_VARIABLE_STRINGS   600
 #define PUTTY_BASED_ON          601

+ 1 - 0
source/resource/TextsCore1.rc

@@ -422,6 +422,7 @@ BEGIN
   CODE_CONNECT, "Connect"
   CODE_PS_ADD_TYPE, "Load WinSCP .NET assembly"
   COPY_INFO_PRESERVE_TIME_DIRS, "%s (including directories)"
+  TEXT_FILE_ENCODING, "The file must be in UTF-8 or UTF-16 encoding."
 
   CORE_VARIABLE_STRINGS, "CORE_VARIABLE"
   PUTTY_BASED_ON, "SSH and SCP code based on PuTTY %s"