Playlist{File,Save}: always use UTF-8 in playlists on Windows
Turns out that using CP_ACP is a lousy idea, because only very few Unicode characters can be represented by it. Instead, switch to UTF-8 (which every sane person on other operating system already uses). Closes #102
This commit is contained in:
parent
753a2aa462
commit
9703a401c5
1
NEWS
1
NEWS
|
@ -6,6 +6,7 @@ ver 0.20.11 (not yet released)
|
||||||
- gme: fix track numbering
|
- gme: fix track numbering
|
||||||
* improve random song order when switching songs manually
|
* improve random song order when switching songs manually
|
||||||
* fix case insensitive search without libicu
|
* fix case insensitive search without libicu
|
||||||
|
* fix Unicode file names in playlists on Windows
|
||||||
* fix endless loop when accessing malformed file names in ZIP files
|
* fix endless loop when accessing malformed file names in ZIP files
|
||||||
|
|
||||||
ver 0.20.10 (2017/08/24)
|
ver 0.20.10 (2017/08/24)
|
||||||
|
|
|
@ -207,13 +207,12 @@ try {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
#ifdef _UNICODE
|
#ifdef _UNICODE
|
||||||
wchar_t buffer[MAX_PATH];
|
/* on Windows, playlists always contain UTF-8, because
|
||||||
auto result = MultiByteToWideChar(CP_ACP, 0, s, -1,
|
its "narrow" charset (i.e. CP_ACP) is incapable of
|
||||||
buffer, ARRAY_SIZE(buffer));
|
storing all Unicode paths */
|
||||||
if (result <= 0)
|
const auto path = AllocatedPath::FromUTF8(s);
|
||||||
|
if (path.IsNull())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const Path path = Path::FromFS(buffer);
|
|
||||||
#else
|
#else
|
||||||
const Path path = Path::FromFS(s);
|
const Path path = Path::FromFS(s);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
#include "fs/AllocatedPath.hxx"
|
#include "fs/AllocatedPath.hxx"
|
||||||
#include "fs/Traits.hxx"
|
#include "fs/Traits.hxx"
|
||||||
#include "fs/FileSystem.hxx"
|
#include "fs/FileSystem.hxx"
|
||||||
#include "fs/NarrowPath.hxx"
|
|
||||||
#include "fs/io/FileOutputStream.hxx"
|
#include "fs/io/FileOutputStream.hxx"
|
||||||
#include "fs/io/BufferedOutputStream.hxx"
|
#include "fs/io/BufferedOutputStream.hxx"
|
||||||
#include "util/UriUtil.hxx"
|
#include "util/UriUtil.hxx"
|
||||||
|
@ -38,7 +37,14 @@
|
||||||
static void
|
static void
|
||||||
playlist_print_path(BufferedOutputStream &os, const Path path)
|
playlist_print_path(BufferedOutputStream &os, const Path path)
|
||||||
{
|
{
|
||||||
os.Format("%s\n", NarrowPath(path).c_str());
|
#ifdef _UNICODE
|
||||||
|
/* on Windows, playlists always contain UTF-8, because its
|
||||||
|
"narrow" charset (i.e. CP_ACP) is incapable of storing all
|
||||||
|
Unicode paths */
|
||||||
|
os.Format("%s\n", path.ToUTF8().c_str());
|
||||||
|
#else
|
||||||
|
os.Format("%s\n", path.c_str());
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in New Issue