Unicode Newline

У меня все более и более расстраивающая проблема в том, что я, по-видимому, не могу напечатать символ 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». Когда я удаляю какую-либо часть, связанную с печатью символов Брайля, она прекрасно печатает новые строки. Я в недоумении.

-1

Решение

Весь файл состоит из 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-битные символы в файл.

3

Другие решения

Других решений пока нет …