Charset default to UTF-8 on Windows

This commit is contained in:
xia-chu 2024-04-20 22:25:21 +08:00
parent 44d6457108
commit e4de454d5d
8 changed files with 8 additions and 38 deletions

@ -1 +1 @@
Subproject commit 43004bef30cb4b48a7f8238027cee1054733f5b1 Subproject commit 26d54bbc7b1860a450434dce49bbc8fcbcbae88b

View File

@ -204,7 +204,7 @@ elseif(WIN32)
if (MSVC) if (MSVC)
set(COMPILE_OPTIONS_DEFAULT set(COMPILE_OPTIONS_DEFAULT
# TODO: /wd4819 # TODO: /wd4819
"/wd4566;/wd4819" "/wd4566;/wd4819;/utf-8"
# warning C4530: C++ exception handler used, but unwind semantics are not enabled. # warning C4530: C++ exception handler used, but unwind semantics are not enabled.
"/EHsc") "/EHsc")
# disable Windows logo # disable Windows logo

View File

@ -219,7 +219,7 @@ timeout_sec=15
retry_count=3 retry_count=3
[http] [http]
#http服务器字符编码windows上默认gb2312 #http服务器字符编码
charSet=utf-8 charSet=utf-8
#http链接超时时间 #http链接超时时间
keepAliveSecond=30 keepAliveSecond=30

View File

@ -208,7 +208,7 @@ static ApiArgsType getAllArgs(const Parser &parser) {
if (parser["Content-Type"].find("application/x-www-form-urlencoded") == 0) { if (parser["Content-Type"].find("application/x-www-form-urlencoded") == 0) {
auto contentArgs = parser.parseArgs(parser.content()); auto contentArgs = parser.parseArgs(parser.content());
for (auto &pr : contentArgs) { 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) { } else if (parser["Content-Type"].find("application/json") == 0) {
try { try {

View File

@ -181,12 +181,7 @@ static onceToken token([]() {
mINI::Instance()[kKeepAliveSecond] = 15; mINI::Instance()[kKeepAliveSecond] = 15;
mINI::Instance()[kDirMenu] = true; mINI::Instance()[kDirMenu] = true;
mINI::Instance()[kVirtualPath] = ""; mINI::Instance()[kVirtualPath] = "";
#if defined(_WIN32)
mINI::Instance()[kCharSet] = "gb2312";
#else
mINI::Instance()[kCharSet] = "utf-8"; mINI::Instance()[kCharSet] = "utf-8";
#endif
mINI::Instance()[kRootPath] = "./www"; mINI::Instance()[kRootPath] = "./www";
mINI::Instance()[kNotFound] = StrPrinter << "<html>" mINI::Instance()[kNotFound] = StrPrinter << "<html>"

View File

@ -66,7 +66,8 @@ void HttpClient::sendRequest(const string &url) {
_http_persistent = true; _http_persistent = true;
if (_body && _body->remainSize()) { if (_body && _body->remainSize()) {
_header.emplace("Content-Length", to_string(_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); bool host_changed = (_last_host != host + ":" + to_string(port)) || (_is_https != is_https);

View File

@ -683,34 +683,10 @@ void HttpSession::sendResponse(int code,
AsyncSender::onSocketFlushed(data); 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) { void HttpSession::urlDecode(Parser &parser) {
parser.setUrl(urlDecodePath(parser.url())); parser.setUrl(strCoding::UrlDecodePath(parser.url()));
for (auto &pr : _parser.getUrlArgs()) { for (auto &pr : _parser.getUrlArgs()) {
const_cast<string &>(pr.second) = urlDecodeComponent(pr.second); const_cast<string &>(pr.second) = strCoding::UrlDecodeComponent(pr.second);
} }
} }

View File

@ -44,8 +44,6 @@ public:
void onRecv(const toolkit::Buffer::Ptr &) override; void onRecv(const toolkit::Buffer::Ptr &) override;
void onError(const toolkit::SockException &err) override; void onError(const toolkit::SockException &err) override;
void onManager() 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 setTimeoutSec(size_t second);
void setMaxReqSize(size_t max_req_size); void setMaxReqSize(size_t max_req_size);