From e4de454d5d2c18733a76f9d8987a56ec7f7536b5 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Sat, 20 Apr 2024 22:25:21 +0800 Subject: [PATCH] Charset default to UTF-8 on Windows --- 3rdpart/ZLToolKit | 2 +- CMakeLists.txt | 2 +- conf/config.ini | 2 +- server/WebApi.cpp | 2 +- src/Common/config.cpp | 5 ----- src/Http/HttpClient.cpp | 3 ++- src/Http/HttpSession.cpp | 28 ++-------------------------- src/Http/HttpSession.h | 2 -- 8 files changed, 8 insertions(+), 38 deletions(-) diff --git a/3rdpart/ZLToolKit b/3rdpart/ZLToolKit index 43004bef..26d54bbc 160000 --- a/3rdpart/ZLToolKit +++ b/3rdpart/ZLToolKit @@ -1 +1 @@ -Subproject commit 43004bef30cb4b48a7f8238027cee1054733f5b1 +Subproject commit 26d54bbc7b1860a450434dce49bbc8fcbcbae88b diff --git a/CMakeLists.txt b/CMakeLists.txt index d4b2519a..cd0124a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -204,7 +204,7 @@ elseif(WIN32) if (MSVC) set(COMPILE_OPTIONS_DEFAULT # TODO: /wd4819 应该是不会生效 - "/wd4566;/wd4819" + "/wd4566;/wd4819;/utf-8" # warning C4530: C++ exception handler used, but unwind semantics are not enabled. "/EHsc") # disable Windows logo diff --git a/conf/config.ini b/conf/config.ini index 3c8b67c8..872d2d32 100644 --- a/conf/config.ini +++ b/conf/config.ini @@ -219,7 +219,7 @@ timeout_sec=15 retry_count=3 [http] -#http服务器字符编码,windows上默认gb2312 +#http服务器字符编码集 charSet=utf-8 #http链接超时时间 keepAliveSecond=30 diff --git a/server/WebApi.cpp b/server/WebApi.cpp index a0690747..97260c0a 100755 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -208,7 +208,7 @@ static ApiArgsType getAllArgs(const Parser &parser) { if (parser["Content-Type"].find("application/x-www-form-urlencoded") == 0) { auto contentArgs = parser.parseArgs(parser.content()); for (auto &pr : contentArgs) { - allArgs[pr.first] = HttpSession::urlDecodeComponent(pr.second); + allArgs[pr.first] = strCoding::UrlDecodeComponent(pr.second); } } else if (parser["Content-Type"].find("application/json") == 0) { try { diff --git a/src/Common/config.cpp b/src/Common/config.cpp index a34ee84f..5a538ab4 100644 --- a/src/Common/config.cpp +++ b/src/Common/config.cpp @@ -181,12 +181,7 @@ static onceToken token([]() { mINI::Instance()[kKeepAliveSecond] = 15; mINI::Instance()[kDirMenu] = true; mINI::Instance()[kVirtualPath] = ""; - -#if defined(_WIN32) - mINI::Instance()[kCharSet] = "gb2312"; -#else mINI::Instance()[kCharSet] = "utf-8"; -#endif mINI::Instance()[kRootPath] = "./www"; mINI::Instance()[kNotFound] = StrPrinter << "" diff --git a/src/Http/HttpClient.cpp b/src/Http/HttpClient.cpp index b9927934..84450d2b 100644 --- a/src/Http/HttpClient.cpp +++ b/src/Http/HttpClient.cpp @@ -66,7 +66,8 @@ void HttpClient::sendRequest(const string &url) { _http_persistent = true; if (_body && _body->remainSize()) { _header.emplace("Content-Length", to_string(_body->remainSize())); - _header.emplace("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + GET_CONFIG(string, charSet, Http::kCharSet); + _header.emplace("Content-Type", "application/x-www-form-urlencoded; charset=" + charSet); } bool host_changed = (_last_host != host + ":" + to_string(port)) || (_is_https != is_https); diff --git a/src/Http/HttpSession.cpp b/src/Http/HttpSession.cpp index ba74d803..ba25f3f4 100644 --- a/src/Http/HttpSession.cpp +++ b/src/Http/HttpSession.cpp @@ -683,34 +683,10 @@ void HttpSession::sendResponse(int code, AsyncSender::onSocketFlushed(data); } -string HttpSession::urlDecodePath(const string &str) { - auto ret = strCoding::UrlDecodePath(str); -#ifdef _WIN32 - GET_CONFIG(string, charSet, Http::kCharSet); - bool isGb2312 = !strcasecmp(charSet.data(), "gb2312"); - if (isGb2312) { - ret = strCoding::UTF8ToGB2312(ret); - } -#endif // _WIN32 - return ret; -} - -string HttpSession::urlDecodeComponent(const string &str) { - auto ret = strCoding::UrlDecodeComponent(str); -#ifdef _WIN32 - GET_CONFIG(string, charSet, Http::kCharSet); - bool isGb2312 = !strcasecmp(charSet.data(), "gb2312"); - if (isGb2312) { - ret = strCoding::UTF8ToGB2312(ret); - } -#endif // _WIN32 - return ret; -} - void HttpSession::urlDecode(Parser &parser) { - parser.setUrl(urlDecodePath(parser.url())); + parser.setUrl(strCoding::UrlDecodePath(parser.url())); for (auto &pr : _parser.getUrlArgs()) { - const_cast(pr.second) = urlDecodeComponent(pr.second); + const_cast(pr.second) = strCoding::UrlDecodeComponent(pr.second); } } diff --git a/src/Http/HttpSession.h b/src/Http/HttpSession.h index 0ffbf137..9f328063 100644 --- a/src/Http/HttpSession.h +++ b/src/Http/HttpSession.h @@ -44,8 +44,6 @@ public: void onRecv(const toolkit::Buffer::Ptr &) override; void onError(const toolkit::SockException &err) override; void onManager() override; - static std::string urlDecodePath(const std::string &str); - static std::string urlDecodeComponent(const std::string &str); void setTimeoutSec(size_t second); void setMaxReqSize(size_t max_req_size);