- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道有很多关于 utf-8 的问题,主要是关于像对象一样操作 utf-8“字符串”的库。
但是,我正在做一个“国际化”项目(一个网站,我在其中编写了一个 C++ 后端代码……别问了),即使我们处理 utf-8,我们实际上也不需要这样的库.大多数时候,普通的 std::string 方法或 STL 算法就足以满足我们的需求,这确实是我们首先使用 utf-8 的目标。
因此,我在这里寻找的是您所知道的与存储为 std::string(无 const char*,我真的不关心 C 风格的代码,我有更好的事情要做,而不是一直担心我的缓冲区大小)。
例如,这里有一个“Quick & Dirty”技巧来获取字符数(这对于了解它是否适合您的显示框很有用):
#include <string>
#include <algorithm>
// Let's remember than in utf-8 encoding, a character may be
// 1 byte: '0.......'
// 2 bytes: '110.....' '10......'
// 3 bytes: '1110....' '10......' '10......'
// 4 bytes: '11110...' '10......' '10......' '10......'
// Therefore '10......' is not the beginning of a character ;)
const unsigned char mask = 0xC0;
const unsigned char notUtf8Begin = 0x80;
struct Utf8Begin
{
bool operator(char c) const { return (c & mask) != notUtf8Begin; }
};
// Let's count
size_t countUtf8Characters(const std::string& s)
{
return std::count_if(s.begin(), s.end(), Utf8Begin());
}
事实上,我还没有遇到一个用例,我需要除字符数以外的任何东西,并且 std::string 或 STL 算法不免费提供,因为:
我想知道您是否有其他类似的技巧,用于计数和其他简单任务。
我再说一遍,我知道 ICU和 Utf8-CPP ,但我对它们不感兴趣,因为我不需要完整的处理(事实上,我只需要字符数)。
我还要重申,我对处理 char* 不感兴趣,它们已经过时了。
最佳答案
好吧,这个卑鄙的把戏是行不通的。首先,mask 的值是多少:
const unsigned char mask = 0x11000000;
const unsigned char notUtf8Begin = 0x10000000;
也许您将十六进制表示与二进制混合。
其次,正如您在 utf-8 编码中所说的那样,一个字符可能有几个字节长。std::count_if 将遍历 UTF8 序列中的所有字节。但您真正需要的是查看每个字符的前导字节并跳过其余部分,直到下一个字符出现。
实现一个计算并向前跳转的单循环并不难对前导字节使用简单的掩码表。
最后,您会得到相同的 O(n) 来检查字符,它适用于每个 UTF8 字符串。
关于c++ - C++ 中的 Utf-8 : quick & dirty tricks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499688/
我在编程中经常看到术语“脏”或“脏对象”。 这是什么意思? 最佳答案 脏对象是内容已更改的对象,但此内容尚未同步回数据库/磁盘。这是缓存和存储之间不同步的典型情况。 关于dirty-data - 术语
我在工作中的一些源代码和其他一些代码中看到一些名为“dirty”的变量。这是什么意思?什么是脏旗? 最佳答案 一般来说,dirty flags用于指示某些数据已更改并且需要最终写入某个外部目的地。它不
我正在尝试通过这个演示项目来学习状态管理和依赖注入(inject)。我正在尝试演示在整个地方注入(inject)一些方法,就像我在程序中可能需要的那样。我使用 GetX 是因为我喜欢能够在非小部件类中
情况 我有一个 Web 应用程序,它使用 JPA 作为底层数据库的链接。当用户通过 UI 修改实体时,这些更改不会立即保存到数据库中。 问题 如何检查实体和底层数据库是否不同步(即实体脏)。 此外,是
我刚刚发现了 --dirty git describe 的选项看起来它应该做一些非常有用的事情,即在 git describe 的输出中附加一个后缀当工作树变脏时,但在我的某些存储库中情况似乎并非如此
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在使用 时遇到一个问题$脏在我的申请表中。 问题是一旦您更改表单字段, 的值$脏将设置为 真实 但是现在,当您撤消更改时,它不会重置 $脏值为 假 . 我们可以重置 $脏值为 假 手动,但之后当您再
我的域类中有一个 transient 方法,它将更新该类的属性。当我使用此方法时,类不会被标记为脏并且不会保存。 class Major { String code String ma
我正在 AngularJS 中创建一个表单,我想验证这些字段,问题是只有在输入中写了一些东西并且在我删除它之后才会出现所需的消息,但我希望消息出现在聚焦输入之后 我的代码如下 Required! 最
我有一个下拉/选择指令,用于替换表单中的选择框。只要表单是原始的,我就设置禁用几个按钮。 app.directive('dropdown', function ($timeout) { ret
是否有任何方便的方法来检查我的应用程序模型是否已被用户更改?我需要它来向用户指示未保存的更改。 值得一提的是,我在应用程序中没有使用任何表单,并且我的 model 从应用程序的根组件向下渗透到子组件,
我正在使用 $window.addEventListener('beforeunload'... 来检测是否对页面进行了更改,并且它基本上按预期工作。我还使用 $transitions.onStart
使用 angularjs 进行表单验证我想在用户单击提交时将所有必填字段标记为错误。 我正在使用 input.ng-dirty.ng-invalid 来设置错误控件的样式。所以我想要的是在用户提交表单
我正在使用 angular-unsaved Changes 指令以及 angular 内置的表单 Controller 来检测表单是否为 $dirty。 我在特定页面上有一个表单,即使我编辑了元素,该
我在页面上有一个 ng 表单。在表单内部,我有几个控件需要在表单脏时显示保存对话框,即 form.$dirty = true。但是表单中有一些导航控件我不想弄脏表单。假设我无法将控件移出表单。 见:h
我有一个适用于所有脏字段和无效字段的 CSS 类: input.ng-dirty.ng-invalid, select.ng-dirty.ng-invalid, textarea.ng-dirty.n
我有一个实用程序,可以获取很多对象(具有相同的祖先)。 然后该实用程序将它们发布给其他客户端。我想添加差异的表示(例如包含所有“脏”字段的 map /列表)。 一般来说我该怎么做?或者我应该为每个对象
我使用 java、jpa(和 hibernate)编写了一个桌面应用程序。 我有一个页面,用户可以在其中编辑 bean 字段并将其保存到数据库。 bean 的字段codice 是唯一的。数据库有 2
我很难理解为什么我的元素在更新模型后显示 ng-dirty。 我有一组需要在 UI 上呈现的桥梁。在每次点击选项卡时,我都会更改索引并呈现数据。 如果我的第一个选项卡数据已更改并移动到第二个选项卡,为
我以前从未使用过 Angular 或 Angular2,但现在我必须对在我的域上运行的使用 Angular2 的站点进行更新。我需要以编程方式填写文本框并单击提交,但在使用 .value = "val
我是一名优秀的程序员,十分优秀!