Fix string conversion issues with emoji characters (#120)

* Fix load/cast of QString to avoid issues with surrogate pairs (emoji characters, ...).

---------

Co-authored-by: Mikaël Capelle <capelle.mikael@gmail.com>
This commit is contained in:
Jeremy Rimpo
2023-12-03 09:15:17 +01:00
committed by GitHub
co-authored by Mikaël Capelle
parent 7a885ad014
commit cc1bc4cb7f
3 changed files with 45 additions and 19 deletions
+8
View File
@@ -11,6 +11,14 @@ PYBIND11_MODULE(qt, m)
{
// QString
m.def("create_qstring_with_emoji", []() {
return QString::fromUtf16(u"\U0001F600");
});
m.def("consume_qstring_with_emoji", [](QString const& qstring) {
return qstring.length();
});
m.def("qstring_to_stdstring", [](QString const& qstring) {
return qstring.toStdString();
});
+9
View File
@@ -10,10 +10,19 @@ def test_qstring():
assert m.qstring_to_stdstring("éàüö") == "éàüö"
assert m.stdstring_to_qstring("éàüö") == "éàüö"
assert m.qstring_to_stdstring("خالد") == "خالد"
assert m.qstring_to_stdstring("🌎") == "🌎"
assert m.qstring_to_int("2") == 2
assert m.int_to_qstring(2) == "2"
emoji = m.create_qstring_with_emoji()
assert emoji.encode("utf-16be", "surrogatepass") == b"\xd8\x3d\xde\x00"
assert m.consume_qstring_with_emoji(emoji) == 2
assert m.consume_qstring_with_emoji("🌎") == 2
def test_qstringlist():
assert m.qstringlist_join([""], "--") == ""