mirror of
https://github.com/mpv-player/mpv
synced 2024-12-18 04:45:33 +00:00
8bbdecea83
several unicode characters can be encoded in two different ways, either in a precomposed (NFC) or decomposed (NFD) representation. everywhere besides on macOS, specifically HFS+, precomposed strings are being used. furthermore on macOS we can get either precomposed or decomposed strings, for example when not HFS+ formatted volumes are used. that can be the case for network mounted devices (SMB, NFS) or optical/removable devices (UDF). this can lead to an inequality of actual equal strings, which can happen when comparing strings from different sources, like the command line or filesystem. this makes it mainly a problem on macOS systems. one case that can potential break is the sub-auto option. to prevent that we convert the search string as well as the string we search in to the same normalised representation, specifically we use the decomposed form which is used anywhere else. this could potentially be a problem on other platforms too, though the potential of occurring is very minor. for those platforms we don't convert anything and just fallback to the input. Fixes #4016
23 lines
741 B
C
23 lines
741 B
C
#ifndef MP_CHARSET_CONV_H
|
|
#define MP_CHARSET_CONV_H
|
|
|
|
#include <stdbool.h>
|
|
#include "misc/bstr.h"
|
|
|
|
struct mp_log;
|
|
|
|
enum {
|
|
MP_ICONV_VERBOSE = 1, // print errors instead of failing silently
|
|
MP_ICONV_ALLOW_CUTOFF = 2, // allow partial input data
|
|
MP_STRICT_UTF8 = 4, // don't fall back to UTF-8-BROKEN when guessing
|
|
MP_NO_LATIN1_FALLBACK = 8, // fall back to input buffer instead of latin1
|
|
};
|
|
|
|
bool mp_charset_is_utf8(const char *user_cp);
|
|
bool mp_charset_is_utf16(const char *user_cp);
|
|
const char *mp_charset_guess(void *talloc_ctx, struct mp_log *log, bstr buf,
|
|
const char *user_cp, int flags);
|
|
bstr mp_iconv_to_utf8(struct mp_log *log, bstr buf, const char *cp, int flags);
|
|
|
|
#endif
|