Author: dchapyshev
Date: Mon Aug 22 13:14:41 2016
New Revision: 72426
URL:
http://svn.reactos.org/svn/reactos?rev=72426&view=rev
Log:
[UTF16LE]
- Implement ability to disable BOM writing
Modified:
trunk/reactos/sdk/tools/utf16le/utf16le.cpp
Modified: trunk/reactos/sdk/tools/utf16le/utf16le.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/tools/utf16le/utf16le.…
==============================================================================
--- trunk/reactos/sdk/tools/utf16le/utf16le.cpp [iso-8859-1] (original)
+++ trunk/reactos/sdk/tools/utf16le/utf16le.cpp [iso-8859-1] Mon Aug 22 13:14:41 2016
@@ -13,6 +13,7 @@
#include <fstream>
#include <iostream>
+#include <string.h>
//#define DISPLAY_DETECTED_UNICODE
@@ -25,14 +26,16 @@
// due to ambiguous BOM
enum enc_types { detect, utf8, utf16le, utf16be, utf32le, utf32be };
enum err_types { none, iopen, oopen, eof, read, write, decode };
+ enum bom_types { bom, nobom };
protected:
err_types error;
enc_types encoding;
+ bom_types bom_type;
unsigned char buffer[4], fill, index; // need 4 char buffer for optional BOM
handling
fstream inputfile,outputfile;
static const unsigned char utf8table[64];
public:
- utf_converter(string ifname, string ofname, enc_types enc = detect) : error(none),
encoding(enc), fill(0), index(0)
+ utf_converter(string ifname, string ofname, bom_types ofbom = bom, enc_types enc =
detect) : error(none), bom_type(ofbom), encoding(enc), fill(0), index(0)
{
enc_types tmp_enc;
inputfile.open(ifname.c_str(), ios::in | ios::binary);
@@ -230,10 +233,15 @@
}
void convert2utf16le()
{
- wchar_t c;
- unsigned char buffer[2] = {0xff, 0xfe};
- outputfile.write(reinterpret_cast<char*>(&buffer),2); // write BOM
- c = get_wchar_t();
+ unsigned char buffer[2] = { 0xff, 0xfe };
+
+ if (bom_type == bom)
+ {
+ outputfile.write(reinterpret_cast<char*>(&buffer), 2); // write
BOM
+ }
+
+ wchar_t c = get_wchar_t();
+
while (!inputfile.eof())
{
buffer[0] = c & 0xff;
@@ -262,12 +270,22 @@
int main(int argc, char* argv[])
{
utf_converter::err_types err;
+
if (argc < 3)
{
cout << "usage: " << argv[0] << " inputfile
outputfile" << endl;
return -1;
}
- utf_converter conv(argv[1],argv[2]);
+
+ utf_converter::bom_types bom_type = utf_converter::bom;
+
+ if (argc == 4 && _stricmp(argv[3], "nobom") == 0)
+ {
+ bom_type = utf_converter::nobom;
+ }
+
+ utf_converter conv(argv[1],argv[2], bom_type);
+
if ((err = conv.getError())!=utf_converter::none)
{
switch (err)
@@ -282,7 +300,11 @@
cerr << "Unknown error." << endl;
}
return -1;
- } else
- conv.convert2utf16le();
+ }
+ else
+ {
+ conv.convert2utf16le();
+ }
+
return 0;
}