Linux C++ 中文處理(uincode與utf-8相互轉化)[Linux CPP uincode utf8]

Linux C++ 中文處理(uincode與utf-8相互轉化)[Linux CPP uincode utf8]

Linux C++ 中文處理(uincode與utf-8相互轉化)[Linux CPP uincode utf8]


資料來源: https://blog.csdn.net/hongxingabc/article/details/82846396

線上測試: https://www.tutorialspoint.com/compile_cpp_online.php

GITHUB: https://github.com/jash-git/Linux-CPP-uincode-utf8


#include <cassert>
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;
 
static const int kTextSize = 10;


std::wstring s2ws(const std::string& str) {
  if (str.empty()) {
    return L"";
  }
  unsigned len = str.size() + 1;
  setlocale(LC_CTYPE, "");
  wchar_t *p = new wchar_t[len];
  mbstowcs(p, str.c_str(), len);
  std::wstring w_str(p);
  delete[] p;
  return w_str;
}
 
std::string ws2s(const std::wstring& w_str) {
    if (w_str.empty()) {
      return "";
    }
    unsigned len = w_str.size() * 4 + 1;
    setlocale(LC_CTYPE, "");
    char *p = new char[len];
    wcstombs(p, w_str.c_str(), len);
    std::string str(p);
    delete[] p;
    return str;
}
 
 
bool FormatText(std::string* txt) {
  if (NULL == txt) {
    return false;
  }
  std::cout << "before:" << *txt << std::endl;
  std::wstring w_txt = s2ws(*txt);
  std::cout << "wstring size:" << w_txt.size() << std::endl;
  std::cout << "string size:" << (*txt).size() << std::endl;
  if (w_txt.size() > kTextSize) {
    w_txt = w_txt.substr(0, kTextSize);
    *txt = ws2s(w_txt);
    *txt += "...";
  }
  std::cout << "after:" << *txt << std::endl;
  return true;
}


int main()
{
   cout << "Hello World" << endl; 
   
  assert(L"" == s2ws(""));
 
  std::string txt = "龙之谷app好玩等你";
  assert(24 == txt.size());
  
  std::wstring w_txt = s2ws(txt);
  assert(10 == w_txt.size());
 
  assert("" == ws2s(L""));
 
  w_txt = L"龙之谷app好玩等你";
  assert(10 == w_txt.size());
  
  txt = ws2s(w_txt);
  assert(24 == txt.size());
 
  txt = "龙之谷app公测开启";
  std::string format_txt = txt;
  FormatText(&format_txt);
  assert(txt == format_txt);
 
  txt = "龙之谷app公测火爆开启";
  FormatText(&txt);
  format_txt = "龙之谷app公测火爆...";
  assert(format_txt == txt);
   
   return 0;
}

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *