Guest User

Untitled

a guest
Oct 23rd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. # C++でutf8 vector containerを作る
  2.  
  3. ## 簡単に実装できない理由
  4. 任意のエンコーディング方式にC++が対応しており、std::string形式だとわけわかんないことになります
  5. そこで、std::wstring_convertというクラスを利用して、std::wstringに変換した後、スライス操作等ができる様になります
  6. スライスした後に、再び、std::stringに戻すことで、std::coutなどの標準入出力に対応することができ、普段慣れているコンテナとして利用することができます
  7.  
  8. ## minimal sample code
  9. ```cpp
  10. #include <string>
  11. #include <tuple>
  12. #include <vector>
  13. #include <iostream>
  14. #include <locale>
  15. #include <codecvt>
  16.  
  17. void tokenize(const std::string& input) {
  18. wcout.imbue(std::locale(""));
  19. std::string context = u8"映画は苦手だったのですが、母の誘いで見に行きました。後半部分が良いです。";
  20. std::wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> cv;
  21. std::wstring wsmessage = cv.from_bytes(context);
  22. wcout << wsmessage << endl;
  23. std::vector<std::string> contain;
  24. int size = contain.size();
  25. for(auto c:wsmessage) cout << cv.to_bytes(c) << " ";
  26. // slicing
  27. }
  28. ```
Add Comment
Please, Sign In to add comment