У меня все более и более расстраивающая проблема в том, что я, по-видимому, не могу напечатать символ Unicode (в данном случае некоторые точки Брайля), перевести его на новую строку и ввести больше точек Брайля. Я искал ответы в течение нескольких часов, и я нахожусь в конце моего ума.
Я попытался изменить формат для своих символов Юникода, изменить местность, изменить порядок, используя несколько потоков, один широкий и один нормальный, и используя бесчисленное множество различных предполагаемых escape-последовательностей Юникода. Это повторяется столько раз, сколько символов в строке. В конце каждой строки в конце должна быть конечная линия.
wout.open((inputstring + "2.txt"), wofstream::binary | wofstream::trunc); //this only happens once_setmode(_fileno(stdout), _O_U16TEXT);switch (i) //will be expanded for more cases
{
case (63):
cout << "\xFF\xFE"; // UTF-16 BOM
cout << "\x0A\x28";
}_setmode(_fileno(stdout), _O_TEXT);
Я использую setmode для переключения на U16 и обратно, потому что другие части программы используют текстовый режим. Если это проблема, я могу обойти это. Когда я пытался использовать
wout << "\n";
в конце каждой строки он изменяет вывод на полусимметрию Брайля, как я и ожидал, наполовину бессмысленно, как «* ૾ H ૾ H H H H ૾ ૾ ૾ H H ૾ H ૾ H H H». Когда я удаляю какую-либо часть, связанную с печатью символов Брайля, она прекрасно печатает новые строки. Я в недоумении.
Весь файл состоит из 8-битных или 16-битных символов, как определено спецификацией UTF-16 в первых двух байтах. Вы не можете измениться между ними. Когда вы записываете 8-битный символ новой строки, это отбрасывает обработку остальной части файла, так как этот 8-битный символ объединяется со следующим байтом в файле для создания 16-битного символа.
Если мы посмотрим на первые несколько слов вашей опечатанной текстовой строки, у нас есть
0020 0022 ff0a 0afe ff28 0afe ff28 0afe
В двоичном файле (с прямым порядком байтов) они будут упорядочены как
20 00 22 00 0a ff fe 0a 28 ff fe 0a 28 ff fe 0a
и вы можете увидеть, как этот однобайтовый символ новой строки объединяется со следующими двумя байтовыми символами для получения неожиданного вывода.
Исправление состоит в том, чтобы всегда записывать 16-битные символы в файл.
Других решений пока нет …