将字符串中的 č,š,ć 等字符替换为其 html 代码C++

Replace characters like č,š,ć in a string to their html codes C++

本文关键字:替换 html C++ 代码 字符 字符串      更新时间:2023-10-16

我正在使用cpprest http_client从RSS链接获取数据。

我修改的数据存储如下:

container_buffer<std::string> buffer;
response.body().read_to_end(buffer).get();
//use buffer.collection() to get data;

而不是将其传递给需要const char *的绘图库.

现在,如果收到的数据是韩语,例如

지방 아파트 분양시장 '양극화

它显示正常。

但如果数据是克罗地亚语或斯洛伐克语等。

Oblačno s kišom i pljuskovima, moguć

人物

č,š,ć

显示为

<?>

现在以下是我尝试过的事情:

  1. 我有 gcc 4.8.1,所以不支持std::codecvt

    链接
  2. 如果我尝试直接将数据存储在字符串中,即

    std::string data;
    data = response.extract_string((.get((;

    克罗地亚语或斯洛伐克语显示正确,但韩语被扭曲了。

  3. 如果我尝试将 č,š,ć 替换为他们的 HTML 代码:

    boost::replace_all(str, "æ", "& aelig;"(;//添加空格,否则在此处显示为 æ nly

    boost::replace_all(str, "ž", "& #382;"(;

    boost::replace_all(str, "š", "& scaron;"(;

    boost::replace_all(str, "è", "& egrave;"(;

与以前一样,这些字符显示正确,但它也阻碍了韩语字符,并将某些韩语字符替换为这些字符。

我该如何才能正确显示所有字符?

您在问题中并没有真正提供所有足够的详细信息,但您遇到某些拉丁语内容问题的原因是因为它使用iso-8859字符集之一进行编码,并且您的区域设置的字符集UTF-8

正确显示任何HTTP响应内容中的所有字符的唯一方法:

1( 从HTTP"内容类型:"标头中获取 charset 属性,该标头将告诉您用于对此HTTP响应正文进行编码的字符集。

2( 如果您的C++库不提供一组类似的区域设置转换,请使用库(如 libiconv(将HTTP响应的正文从编码字符集转换为区域设置的字符集。

根据我的经验,使用 libiconv 更可靠,因为 C++ 标准并不能保证支持哪些语言环境。