07.12.2013, 15:07 | #41 |
Moderator
|
Цитата:
X++: static void Main(string[] args) { string path = args[0]; System.Text.Encoding encodingUTF = System.Text.Encoding.UTF8; System.Text.Encoding encodingWin = System.Text.Encoding.ASCII; string content = ""; using (FileStream fs = File.Open(path, FileMode.Open)) { StreamReader sr = new StreamReader(fs, Encoding.Default); content = sr.ReadToEnd(); } using (FileStream fsw = File.OpenWrite(path)) { Byte[] info = new UTF8Encoding(true).GetBytes(content); fsw.WriteByte(0xEF); fsw.WriteByte(0xBB); fsw.WriteByte(0xBF); fsw.Write(info, 0, info.Length); } } |
|
07.12.2013, 22:37 | #42 |
Участник
|
Попробуйте такой вариант, насколько помню работал, у самого нет под рукой 3-ки проверить:
X++: Com objStream = new Com('ADODB.Stream'); ; objStream.CharSet('utf-8'); objStream.Open(); objStream.WriteText('тест'); objStream.SaveToFile(@'c:\test.txt'); objStream.Close(); |
|
|
За это сообщение автора поблагодарили: DreamCreator (3), Alenka (1). |
17.12.2013, 02:49 | #43 |
Участник
|
Цитата:
Попробовал применить такой подход для строчек - не получилось В чем может быть проблема ? Изначально задача стояла переписать на .Net функции X++: client static str oem2CharBuff(str strSource) { DLL winApiDLL = new DLL( #UserDLL ); DLLFunction oemToCharBuff = new DLLFunction( winApiDLL, @'OemToCharBuffA'); Binary bSource = new Binary( strSource ); str ret; ; oemToCharBuff.returns( ExtTypes::DWORD ); oemToCharBuff.arg( ExtTypes::POINTER, ExtTypes::POINTER, ExtTypes::DWord ); oemToCharBuff.call( bSource, bSource, strlen(strSource) ); ret = bSource.string(0); return ret; } X++: client static str char2OEM(str strSource) { DLL _winApiDLL = new DLL('USER32'); DLLFunction _CharToOEM = new DLLFunction(_winApiDLL, 'CharToOemA'); Binary bSource = new Binary(strSource); str oemstr; ; _CharToOEM.returns(ExtTypes:: DWORD); _CharToOEM.arg(ExtTypes::POINTER, ExtTypes::POINTER); _CharToOEM.call(bSource, bSource); oemstr = bSource.string(0); return oemstr; } X++: client static str oem2Char(str strSource) { DLL _winApiDLL = new DLL('USER32'); DLLFunction _CharToOEM = new DLLFunction(_winApiDLL, 'OemToCharA'); Binary bSource = new Binary(strSource); str winstr; ; _CharToOEM.returns(ExtTypes:: DWORD); _CharToOEM.arg(ExtTypes::POINTER, ExtTypes::POINTER); _CharToOEM.call(bSource, bSource); winstr = bSource.string(0); return winstr; } Попробовал вот так : X++: static void Unicode2ANSI_5(Args _args) { // str unicodeStr; System.Text.Encoding encAnsi; System.Byte[] bytesAnsi; System.Byte byte; str byteStr; Counter len; Counter n; asciiio file = SysDataIntegration::openFile(@"c:\_\ttt.txt", "R", ";"); container con; System.Text.Encoding encoding; System.Text.Encoding encoding866; System.Text.Encoding encodingUTF; System.Text.Encoding encodingAnsi; System.Byte[] tmp; System.String ss; str s; str ret; ; New InteropPermission(InteropKind::ClrInterop).assert(); while (file.status() == IO_Status::Ok) { con = file.read(); s = conPeek(con,1); ss = s; //encodingUTF = System.Text.Encoding::get_Unicode(); encodingUTF = System.Text.Encoding::get_UTF8(); encoding866 = System.Text.Encoding::GetEncoding(866); //encoding866 = System.Text.Encoding::get_ASCII(); tmp = encoding866.GetBytes(ss); tmp = System.Text.Encoding::Convert(encoding866, encodingUTF, tmp); ret = encodingUTF.GetString(tmp); info(strFMT("%1 <---> %2 <---> %3 ", conPeek(con,1), winapi::oem2CharBuff( conPeek(con,1) ), ret )); break; } } В файле лежит строка Цитата:
1. Кодировка
Цитата:
1. Љ®¤Ёа®ўЄ
Цитата:
1. Кодировка
Цитата:
1. Љ®¤Ёа®ўЄ
Процитированный джобик вывел что-то типа Цитата:
4. Љ®¤Ёа®ўЄ <---> 4. Кодировка <---> 4. ?R¤ЁаRўЄ
Последний раз редактировалось Logger; 17.12.2013 в 03:11. |
|
17.12.2013, 11:13 | #44 |
Участник
|
Решение нашлось
X++: //pkoz 17.12.2013 server static str oem2Char(str strSource) { str ret; System.Text.Encoding encAnsi; System.Text.Encoding enc866; System.Byte[] bytesAnsi; System.Byte[] bytes; ; new InteropPermission(InteropKind::ClrInterop).assert(); encAnsi = System.Text.Encoding::get_Default(); enc866 = System.Text.Encoding::GetEncoding(866); bytesAnsi = encAnsi.GetBytes( strSource ); bytes = System.Text.Encoding::Convert(enc866, encAnsi, bytesAnsi); ret = encAnsi.GetString(bytes); return ret; } |
|
|
За это сообщение автора поблагодарили: gl00mie (7), demoded (2), (1). |
17.12.2013, 11:21 | #45 |
Дмитрий Ерин
|
X++: str dos2win(str _source, int _srcCodePage = 866, int _destCodePage = 1251) { System.Text.Encoding encodingSource = System.Text.Encoding::GetEncoding(_srcCodePage); System.Text.Encoding encodingDest = System.Text.Encoding::GetEncoding(_destCodePage); System.Byte[] buff = encodingSource.GetBytes(_source); str dest = encodingDest.GetString(buff); return dest; }
__________________
|
|
|
За это сообщение автора поблагодарили: Logger (10), Ace of Database (3), Weez (3). |
09.07.2014, 09:29 | #46 |
Участник
|
А как кодеровку менять в AX 3 ?
|
|
09.05.2015, 10:37 | #47 |
MCTS
|
Полезно для экспорта csv в utf8 daxdilip: Tip - How to write to utf-8 encoding format using CommaTextIo Class
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|