Archived Forum Post

Index of archived forum posts

Question:

CkStringArray LoadFile does not support Danish characters in the path

May 08 '13 at 15:54

When I use CkStringArray's LoadFile or LoadFromFile2 methods to load the content of a text file where the path contains Danish, Swedish and most likely characters from other languages, it fails with the following:

ChilkatLog:
  LoadFromFile2:
    DllDate: Dec 18 2012
    UnlockPrefix: XXXXXXXXXXXXXX
    Username: XXXXXXXXXXXXX
    Architecture: Little Endian; 32-bit
    Language: Visual C++ 11.0
    VerboseLogging: 0
    loadFromFile2:
      loadFileAnsi:
        openForReadWin32:
          Failed to open file (2)
          localFilePath: D:\test\llebrd\test.txt
          currentWorkingDirectory: D:\Projects\TestProject
          osErrorInfo: The system cannot find the path specified.
          localWindowsFilePath: D:\test\llebrd\test.txt
        --openForReadWin32
      --loadFileAnsi
    --loadFromFile2
  --LoadFromFile2
--ChilkatLog

The path in question contains the letter 'ø' as in øllebrød: D:\test\øllebrød\test.txt. If I use CkString's LoadFile method it appears to work fine.


Accepted Answer

I tested but did not find a problem.

Maybe this is the problem: When a "const char " is passed to a Chilkat method, the default interpretation is that the bytes are characters represented in the ANSI encoding. If you are passing a "const char " that contains utf-8 encoded, bytes, you must first tell the object instance that it should interpret incoming "const char *" args as utf-8. You would do this by setting the "Utf8" property (which is common to all Chilkat C++ classes) to true. For example:

CkString strPath;
// Passing ANSI here because it's a string literal.
strPath.append("D:/test/øllebrød/test.txt"); 

CkStringArray sa; sa.put_Utf8(true); // Passing the utf-8 representation of the path to LoadFromFile: bool success = sa.LoadFromFile(strPath.getUtf8());

See: http://www.cknotes.com/?p=98