C++/Line-ending ja character encoding

Hello ja hyvää Itsenäisyyspäivää,

kuinka tarkistan c++:lla tiedoston merkki-koodauksen ja rivien lopetuksen tyypin.
Haluasin luettavien ja kirjoitettavien tiedostojen olevan encoding:UTF-8 ja line-ending:UNIX/LINUX

Siis avaan lukemista ja kirjoittamista varten tekstitiedoston:

Tässä koodia lyhennettynä:

// avaus
fstream pFile;
pFile.open("tiedosto.ini", ios_base::in|ios_base_out);

// tiedostoon luku rivi kerrallaan silmukassa
string readBuf;
while(pFile.peek()!=EOF)
{
     getline(pFile, readBuf);
     
     // .. tarvittavat merkkijono muokkaukset stringille, trimmaus, merkkien poistoa ja muuta vastaavaa jne...
}

Jäljenpänä sitten käsittelen luettua dataa haluamallani tavalla…

Rivien lopetuksen tyypin voinen tarkistaa tuossa lukusilmukassa tarkistelemalla readBufferin viimeistä kahta merkkiä eli niiden on oltava \n?

-Kiittäen Kingpin

elikken encodingin saa selville avaamalla tiedosto binäärimuodossa ja tutkimalla sen neljän ensimmäisen merkin hexa arvoja.


#define HEX_00 0
#define HEX_7F 127

fstream file;
file.open("tiedosto.ini", ios_base::in|ios_base::binary);

int bytes[4]={HEX_00,HEX_00,HEX_00,HEX_00};

for(int i=0; i<4 ;i++)
   bytes[i]=file.get();

file.close();

if(bytes[0]<= HEX_7F && bytes[1]<= HEX_7F && bytes[2]<= HEX_7F && bytes[3]<= HEX_7F) // tosin kaikki merkit tiedostossa oltava <= HEX_7F
  cout << "Encode ASCII" << endl;

// muita tarkistuksia eli UTF-16 BE, UTF-16 LE, UTF-32 BE jne...eli 

// UTF-16 BE : 2 ekaa byteä ovat FE FF (254 ja 255)ja tämän jälkeen muut merkit tiedostossa ovat dataa 9–13, 32–126, and 128-255 ja kontrollimerkkejä loput  

-Kingpin