2017-08-07 1167 views
1

這行代碼工作正常。如何將字符串轉換爲u8?

#include <cstdlib> 
#include <iostream> 
#include <locale.h> 
#include <string> 
#include <locale> 
#include <codecvt> 
#include <cassert> 

int main() { 

    const auto str = u8"حخدذرزژس"; 
    wstring_convert<codecvt_utf8<char32_t>, char32_t> cv; 
    auto str32 = cv.from_bytes(str); 
    for (auto c : str32) 
     cout << uint_least32_t(c) << '\n'; 

    return 0; 
} 

我需要從文件中讀取字符串「حخدذرزژس」。

如何初始化const auto str與從文件中讀取的字符串以獲得與上述代碼相同的答案?

+0

@ OLIVER.KOO:他想從文件中讀取 –

+6

'basic_string'不知道關於它的編碼的任何信息。如果您的文件包含UTF8字符串,則只需從文件中讀取它,就像讀取任何其他字符串一樣。 – Paul

+0

只是打開並閱讀文件 –

回答

1

它حخدذرزژس

讀取文件,並將其轉換輸入,如果是合法的UTF-8我創建了一個測試文件與下面的文本,

(注意:當您保存文本它應該是在U8格式)

#include<iostream> 
#include <fstream> 
#include <sstream> 
#include <string> 
#include <cstdint> 
#include <locale> 
#include <codecvt> 
using namespace std; 

std::wstring convert(const std::string& input) 
{ 
    try 
    { 
     std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; 
     return converter.from_bytes(input); 
    } 
    catch (std::range_error& e) 
    { 
     size_t length = input.length(); 
     std::wstring result; 
     result.reserve(length); 
     for (size_t i = 0; i < length; i++) 
     { 
      result.push_back(input[i] & 0xFF); 
     } 
     return result; 
    } 
} 
int main() 
{ 
    // read entire file into string 
    if (std::ifstream is{ "C:\\Users\\hsingh\\Documents\\Visual Studio 2017\\Projects\\ConsoleApplication4\\Debug\\test.txt", std::ios::binary | std::ios::ate }) { 
     auto size = is.tellg(); 
     std::string str(size, '\0'); // construct string to stream size 
     is.seekg(0); 
     if (is.read(&str[0], size)) 
     { 
      auto read = convert(str); 

     } 
    } 
} 

它讀取文件

U8