THRIFT-3755 TDebugProtocol::writeString hits assert in isprint on Windows with debug CRT

This closes #960
diff --git a/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp b/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp
index 4687e82..09b978c 100644
--- a/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp
+++ b/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp
@@ -347,7 +347,9 @@
       output += "\\\\";
     } else if (*it == '"') {
       output += "\\\"";
-    } else if (std::isprint(*it)) {
+      // passing characters <0 to std::isprint causes asserts. isprint takes an
+      // int, so we need to be careful of sign extension
+    } else if (std::isprint((unsigned char)*it)) {
       output += *it;
     } else {
       switch (*it) {