console encoding patch

This commit is contained in:
2022-04-26 22:49:31 +03:00
parent 5ae1cfae87
commit 2f4e73ef13
4 changed files with 47 additions and 7 deletions

View File

@@ -22,6 +22,10 @@
#include "pistack.h"
#include "piobject.h"
#include "pistring_std.h"
#ifdef HAS_LOCALE
# include <locale>
# include <codecvt>
#endif
#ifdef WINDOWS
# include <windows.h>
# include <wingdi.h>
@@ -147,6 +151,9 @@ PRIVATE_DEFINITION_START(PICout)
static WORD dattr;
static DWORD smode;
#endif
#ifdef HAS_LOCALE
std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t> utf8conv;
#endif
PRIVATE_DEFINITION_END(PICout)
#ifdef WINDOWS
@@ -539,8 +546,13 @@ PICout & PICout::writePIString(const PIString & s) {
if (buffer_) {
buffer_->append(s);
} else {
if (PICout::isOutputDeviceActive(PICout::StdOut)) {
#ifdef HAS_LOCALE
std::cout << PRIVATE->utf8conv.to_bytes((char16_t*)&(const_cast<PIString&>(s).front()), (char16_t*)&(const_cast<PIString&>(s).front()) + s.size());
#else
for (PIChar c: s) std::wcout.put(c.toWChar());
#endif
}
if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__().append(s);
}