diff --git a/lsp-server/src/lsp/server.cpp b/lsp-server/src/lsp/server.cpp index 457c98f..7d1e9e6 100644 --- a/lsp-server/src/lsp/server.cpp +++ b/lsp-server/src/lsp/server.cpp @@ -1,5 +1,9 @@ #include #include +#ifdef _WIN32 +#include +#include +#endif #include "../provider/base/provider_registry.hpp" #include "./server.hpp" #include "./logger.hpp" @@ -117,10 +121,24 @@ namespace lsp log::Debug("Response length: ", byte_length); log::Debug("Raw response content: [", response_str, "]"); - std::cout << "Content-Length: " << byte_length << "\r\n\r\n"; - std::cout << response_str; - std::cout.flush(); + // 在程序启动时设置stdout为二进制模式(只需设置一次) + static bool binary_mode_set = false; + if (!binary_mode_set) { +#ifdef _WIN32 + _setmode(_fileno(stdout), _O_BINARY); +#endif + binary_mode_set = true; + } + + // 构建完整消息 + std::string header = "Content-Length: " + std::to_string(byte_length) + "\r\n\r\n"; + + // 使用 write 系统调用,绕过 C++ 流的缓冲和转换 + std::cout.write(header.c_str(), header.length()); + std::cout.write(response_str.c_str(), response_str.length()); + std::cout.flush(); + + log::Verbose("Response sent successfully2"); - log::Verbose("Response sent successfully"); } } diff --git a/vscode/bin/tsl-server.exe b/vscode/bin/tsl-server.exe index fce21b0..a33d4f7 100644 Binary files a/vscode/bin/tsl-server.exe and b/vscode/bin/tsl-server.exe differ diff --git a/vscode/tsl-devkit-2.0.0.vsix b/vscode/tsl-devkit-2.0.0.vsix index cc166e5..1254f5e 100644 Binary files a/vscode/tsl-devkit-2.0.0.vsix and b/vscode/tsl-devkit-2.0.0.vsix differ