2017-08-07 12 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); 

     } 
    } 
} 

する必要があります0

U8

関連する問題