Skip to content

Issues with unicode characters in filenames on Windows 10 (Unix-like situation is currently unknown to me). #35

Open

Description

@thalassocracy

https://github.com/JuliaAudio/LibSndFile.jl/blob/master/src/libsndfile_h.jl#L122

function sf_open(fname::String, mode, sfinfo)
    filePtr = ccall((:sf_open, libsndfile), Ptr{Cvoid},
                    (Cstring, Int32, Ref{SF_INFO}),
                    fname, mode, sfinfo)

    if filePtr == C_NULL
        error("LibSndFile.jl error while opening $fname: ", sf_strerror(C_NULL))
    end

    filePtr
end

Fixed on Windows 10 by changing Cstring to Cwstring and sf_open to sf_wchar_open.

The sf_wchar_open change is definitely Windows-specific, but there's a chance that opening filenames with wide characters in them on Unix-like systems will also benefit from changing Cstring to Cwstring. I will experiment with this at some point in the near future on Linux.

If I find that Linux also requires Cwstring, I will open a pull req with that change (but not the Windows-specific sf_wchar_open).

Activity

  1. changed the title [-]Issues with unicode characters in filenames on Windows 10 (Unix-like situation is currently unknown).[/-] [+]Issues with unicode characters in filenames on Windows 10 (Unix-like situation is currently unknown to me).[/+] on Dec 17, 2020
  2. added a commit that references this issue on Oct 27, 2021
  3. nantonel commented on Oct 27, 2021

    @nantonel
    Collaborator

    I partially fixed the problem in Julia 1.6 using the following:

      if Sys.iswindows()
        ptr = pointer(transcode(Cwchar_t,fname))
        filePtr = ccall((:sf_wchar_open, libsndfile), Ptr{Cvoid},
                        (Cwstring, Int32, Ref{SF_INFO}),
                        Cwstring(ptr), mode, sfinfo)
      else
        filePtr = ccall((:sf_open, libsndfile), Ptr{Cvoid},
                        (Cstring, Int32, Ref{SF_INFO}),
                        fname, mode, sfinfo)
      end
    

    however some tests are randomly breaking with the message The filename, directory name, or volume label syntax is incorrect.. This seems to be a Windows string encoding problem. Possibly it'll be fixed in newer Julia versions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions