add:添加去除非ASCII附近空白函数。
This commit is contained in:
parent
6f2ab1c560
commit
6cada82609
@ -24,6 +24,7 @@ set(SRC_FILES
|
|||||||
)
|
)
|
||||||
|
|
||||||
include_directories(include)
|
include_directories(include)
|
||||||
|
include_directories(3rd)
|
||||||
if(DEFINED USE_TEST)
|
if(DEFINED USE_TEST)
|
||||||
message(STATUS "USE TEST")
|
message(STATUS "USE TEST")
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
@ -245,6 +245,11 @@ public:
|
|||||||
static std::string u8ToGBK(const std::string& str);
|
static std::string u8ToGBK(const std::string& str);
|
||||||
static std::string GBKTou8(const std::string& str);
|
static std::string GBKTou8(const std::string& str);
|
||||||
#endif
|
#endif
|
||||||
|
/// @brief 删除,段落中的空白字符,如[你好 啊,在 哪里 ?] => [你好啊,在哪里?]
|
||||||
|
/// 仅处理非 ASCII 码附近的内容。
|
||||||
|
/// @param str
|
||||||
|
/// @return
|
||||||
|
static ofString rbs(const ofString& str);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef class CThreadSleep
|
typedef class CThreadSleep
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <utf8.h>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -150,6 +151,47 @@ std::string CCodec::GBKTou8(const std::string& str)
|
|||||||
return utf8Str;
|
return utf8Str;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ofString CCodec::rbs(const ofString& str)
|
||||||
|
{
|
||||||
|
std::string utf8_str;
|
||||||
|
#ifdef UNICODE_OFSTR
|
||||||
|
utf8::utf16to8(str.begin(), str.end(), std::back_inserter(utf8_str));
|
||||||
|
#else
|
||||||
|
utf8_str = str;
|
||||||
|
#endif
|
||||||
|
std::vector<char32_t> unicode_chars;
|
||||||
|
utf8::utf8to32(utf8_str.begin(), utf8_str.end(), std::back_inserter(unicode_chars));
|
||||||
|
std::vector<char32_t> processed_chars;
|
||||||
|
for (size_t i = 0; i < unicode_chars.size(); ++i) {
|
||||||
|
char32_t current = unicode_chars[i];
|
||||||
|
if (current == U' ' || current == U'\t' || current == U'\n' || current == U'\r') {
|
||||||
|
bool near_non_ascii = false;
|
||||||
|
if (i > 0 && unicode_chars[i - 1] > 0x7F) {
|
||||||
|
near_non_ascii = true;
|
||||||
|
}
|
||||||
|
if (i + 1 < unicode_chars.size() && unicode_chars[i + 1] > 0x7F) {
|
||||||
|
near_non_ascii = true;
|
||||||
|
}
|
||||||
|
if (near_non_ascii) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
processed_chars.push_back(current);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string result_utf8;
|
||||||
|
utf8::utf32to8(processed_chars.begin(), processed_chars.end(), std::back_inserter(result_utf8));
|
||||||
|
|
||||||
|
ofString result;
|
||||||
|
#ifdef UNICODE_OFSTR
|
||||||
|
utf8::utf8to16(result_utf8.begin(), result_utf8.end(), std::back_inserter(result));
|
||||||
|
#else
|
||||||
|
result = result_utf8;
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
CThreadSleep::CThreadSleep()
|
CThreadSleep::CThreadSleep()
|
||||||
{
|
{
|
||||||
is_stop_sleep_ = false;
|
is_stop_sleep_ = false;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "of_str.h"
|
#include <of_str.h>
|
||||||
#include <of_path.h>
|
#include <of_path.h>
|
||||||
|
#include <of_util.h>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
using namespace ofen;
|
using namespace ofen;
|
||||||
@ -19,10 +20,18 @@ void testB()
|
|||||||
assert(rp == ofT("cpNiz"));
|
assert(rp == ofT("cpNiz"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void testC()
|
||||||
|
{
|
||||||
|
std::string source(u8"这是 一 个测试 用例。 ");
|
||||||
|
std::string expect(u8"这是一个测试用例。");
|
||||||
|
assert(CCodec::rbs(source) == expect);
|
||||||
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
testA();
|
testA();
|
||||||
testB();
|
testB();
|
||||||
|
testC();
|
||||||
std::cout << "Done" << std::endl;
|
std::cout << "Done" << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user