1
$\begingroup$

I've encountered a problem with Unicode Windows file name.

If I set the file name to Unicode characters on Mac OSX, it works well. But on Windows if the filename starts with a digital number or the filename/path contains Unicode characters, it will not work well. (I am using Chinese Windows version, and Windows may be using GBK codings.)

If the filename starts with a digit, the \ will escape the following digit.

If the filename/path contains a Unicode character, Mathematica will not find the file in some situations.

This works:

enter image description here

This does not work (it tells me the file cannot be found):

enter image description here

Sorry the pictures are captured using Mac (it works), as on Windows system, the path separator will not be / but be \ . So it will cause the problem mentioned above.

Btw, I am using this to get the filename.

enter image description here

Edited

Sorry for late. I managed to find a Windows PC and got the file name as a string.

Here is the Unicode file name on Windows:

ExcelFileName

"C:\Users\jinyongjie\Desktop\20161228合纵科技并购.xlsx"

@Stitch I tried to replace the directory separator, but still cannot work:

StringReplace[ExcelFileName,"\\"->"/"]

"C:/Users/jinyongjie/Desktop/20161228合纵科技并购.xlsx"

enter image description here

$\endgroup$
13
  • $\begingroup$ are you using \\ or \ on windows? $\endgroup$
    – vapor
    Commented Mar 17, 2017 at 15:49
  • $\begingroup$ Windows generated `\` as separator automatically. $\endgroup$
    – cmal
    Commented Mar 17, 2017 at 15:50
  • 1
    $\begingroup$ So have you tried escaping the backslash? In other words, you'll use "\\" as the path separator in Mathematica. $\endgroup$
    – Pirx
    Commented Mar 17, 2017 at 15:56
  • $\begingroup$ is your problem :FileNameSetter does not generate double slash for filenames, and that caused file not found problems in some cases? $\endgroup$
    – vapor
    Commented Mar 17, 2017 at 15:59
  • 2
    $\begingroup$ You should be able to use / on Windows as well. $\endgroup$
    – Stitch
    Commented Mar 17, 2017 at 16:29

1 Answer 1

1
$\begingroup$

I've found the encoding of file names on Windows systems is "CP936".

To Replace \ to / does not work maybe because of the encoding of / is "UTF8", so I use the following expression to split filename to table of strings and then join them back again and intercept them with $PathnameSeparator.

StringJoin[Riffle[FileNameSplit[Excel文件名], $PathnameSeparator]]

And It works!

$\endgroup$
2
  • 1
    $\begingroup$ Will FileNameJoin @ FileNameSplit[Excel文件名] do the same? $\endgroup$
    – Kuba
    Commented Mar 20, 2017 at 9:36
  • $\begingroup$ I've tried that. No. $\endgroup$
    – cmal
    Commented Mar 21, 2017 at 8:54

Not the answer you're looking for? Browse other questions tagged or ask your own question.