Overview
Comment: | OFStdIOStream_Win32Console: Use U+FFFD, not U+FFFE
U+FFFD is for unrepresentable characters, not U+FFFE. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
9d70e660eaa6bd32842e8e6ab0ebd155 |
User & Date: | js on 2016-03-13 20:04:47 |
Other Links: | manifest | tags |
Context
2016-03-13
| ||
20:29 | OFStdIOStream_Win32Console: Small read fix check-in: 976162aa79 user: js tags: trunk | |
20:04 | OFStdIOStream_Win32Console: Use U+FFFD, not U+FFFE check-in: 9d70e660ea user: js tags: trunk | |
19:33 | OFStdIOStream_Win32Console: Improve writing check-in: 3a0fdb6701 user: js tags: trunk | |
Changes
Modified src/OFStdIOStream_Win32Console.m from [c806288ec6] to [c7b07d3dc1].
︙ | ︙ | |||
27 28 29 30 31 32 33 | * read. * * Therefore, instead of just using the UTF-8 codepage, this captures all reads * and writes to of_std{in,out,err} on the lowlevel, interprets the buffer as * UTF-8 and converts to / from UTF-16 to use ReadConsoleW() / WriteConsoleW(). * Doing so is safe, as the console only supports text anyway and thus it does * not matter if binary gets garbled by the conversion (e.g. because invalid | | | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | * read. * * Therefore, instead of just using the UTF-8 codepage, this captures all reads * and writes to of_std{in,out,err} on the lowlevel, interprets the buffer as * UTF-8 and converts to / from UTF-16 to use ReadConsoleW() / WriteConsoleW(). * Doing so is safe, as the console only supports text anyway and thus it does * not matter if binary gets garbled by the conversion (e.g. because invalid * UTF-8 gets converted to U+FFFD). * * In order to not do this when redirecting input / output to a file (as the * file would then be read / written in the wrong encoding and break reading / * writing binary), it checks that the handle is indeed a console. */ #define OF_STDIO_STREAM_WIN32_CONSOLE_M |
︙ | ︙ | |||
245 246 247 248 249 250 251 | UTF8Len = of_string_utf8_decode( _incompleteUTF8Surrogate, _incompleteUTF8SurrogateLen, &c); if (UTF8Len <= 0 || c > 0x10FFFF) { assert(UTF8Len == 0 || UTF8Len < -4); | | | 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | UTF8Len = of_string_utf8_decode( _incompleteUTF8Surrogate, _incompleteUTF8SurrogateLen, &c); if (UTF8Len <= 0 || c > 0x10FFFF) { assert(UTF8Len == 0 || UTF8Len < -4); UTF16[0] = 0xFFFD; UTF16Len = 1; } else { if (c > 0xFFFF) { c -= 0x10000; UTF16[0] = 0xD800 | (c >> 10); UTF16[1] = 0xDC00 | (c & 0x3FF); UTF16Len = 2; |
︙ | ︙ | |||
292 293 294 295 296 297 298 | length - i); _incompleteUTF8SurrogateLen = length - i; break; } if (UTF8Len <= 0 || c > 0x10FFFF) { | | | 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 | length - i); _incompleteUTF8SurrogateLen = length - i; break; } if (UTF8Len <= 0 || c > 0x10FFFF) { tmp[j++] = 0xFFFD; i++; continue; } if (c > 0xFFFF) { c -= 0x10000; tmp[j++] = 0xD800 | (c >> 10); |
︙ | ︙ |