Ring Daemon
Loading...
Searching...
No Matches
utf8_utils.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2026 Savoir-faire Linux Inc.
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
19
20#include <simdutf.h>
21
22#include <cassert>
23
24namespace jami {
25
26bool
27utf8_validate(std::string_view str)
28{
29 return simdutf::validate_utf8(str.data(), str.size());
30}
31
32std::string
33utf8_make_valid(std::string_view name)
34{
35 std::string sanitized;
36 sanitized.reserve(name.size());
37 while (!name.empty()) {
38 const auto [err, valid_bytes] = simdutf::validate_utf8_with_errors(name.data(), name.size());
39 if (!err) {
40 sanitized.append(name);
41 break;
42 }
43 sanitized.append(name.data(), valid_bytes);
44 sanitized.append("\xEF\xBF\xBD", 3); // append '�'
45 name.remove_prefix(valid_bytes + 1);
46 }
47 return sanitized;
48}
49
50} // namespace jami
bool utf8_validate(std::string_view str)
utf8_validate:
void emitSignal(Args... args)
Definition jami_signal.h:64
std::string utf8_make_valid(std::string_view name)