Tag: 多字节

UTF-8“可变宽度编码”如何工作?

unicode标准有足够的代码点,你需要4个字节来存储它们。 这就是UTF-32编码所做的。 然而,UTF-8编码以某种方式通过使用称为“可变宽度编码”的东西将它们挤压到更小的空间中。 实际上,它只是用一个字节表示US-ASCII的前127个字符,看起来就像真正的ASCII,所以你可以把许多ASCII文本解释为UTF-8,而不用做任何事情。 整洁的把戏。 那么它是怎样工作的? 我要在这里问一问,回答我自己的问题,因为我只是做了一些解读,我认为这可能会让别人省下一些时间。 另外也许有人可以纠正我,如果我有一些错误。

PHP preg_functions是否是多字节安全的?

PHP中没有可用的多字节“preg”函数,那么这是否意味着默认的preg_functions是安全的? 在php文档中找不到任何提及。

Ruby 1.9:我怎样才能正确地提升和取消多字节string?

所以matz决定在Ruby 1.9.1中保持上/[AZ]/i downcase为/[AZ]/i 。 ActiveSupport::Multibyte在Ruby 1.8.x中通过String#mb_chars已经有了很好的i18n情况。 但是,在Ruby 1.9.1下试用时,它似乎不起作用。 下面是我写的一个简单的testing脚本,以及我得到的输出: $ cat test.rb # encoding: UTF-8 puts("@ #{RUBY_VERSION} " + (__ENCODING__ rescue $KCODE).to_s) sd, su = "Iñtërnâtiônàlizætiøn", "IÑTËRNÂTIÔNÀLIZÆTIØN" def ps(u, d, k); puts "%-30s: %24s / %-24s" % [k, u, d] end ps sd.upcase, su.downcase, "Plain ruby" require 'rubygems'; require 'active_support' ps sd.upcase, su.downcase, "With active_support" […]

用printf打印UTF-8string与多字节string文字

在像这样的语句中,两者都以相同的编码(UTF-8)input到源代码中,并且语言环境设置正确,它们之间是否有实际区别? printf("ο Δικαιοπολις εν αγρω εστιν\n"); printf("%ls", L"ο Δικαιοπολις εν αγρω εστιν\n"); 因此,在做输出时,是否有理由相对于另一个? 我想第二个performance会更糟,但是它在多字节文字上有什么优势(或缺点)吗? 编辑:这些string打印没有问题。 但是我没有使用宽string函数,因为我希望能够使用printf等。 所以问题在于这些印刷方式是否与以上所述情况不符?如果是这样,第二种方式有什么优势? 编辑2:下面的评论,我现在知道这个程序的作品 – 我认为是不可能的: int main() { setlocale(LC_ALL, ""); wprintf(L"ο Δικαιοπολις εν αγρω εστιν\n"); // wide output freopen(NULL, "w", stdout); // lets me switch printf("ο Δικαιοπολις εν αγρω εστιν\n"); // byte output } 编辑3 :我已经做了一些进一步的研究,看看这两种types正在发生什么。 采取更简单的string: wchar_t *wides = […]

将多字节string截断为n个字符

我想在一个stringfilter工作中得到这个方法: public function truncate($string, $chars = 50, $terminator = ' …'); 我期待这一点 $in = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890"; $out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …"; 也是这个 $in = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ"; $out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …"; 那就是$chars减去$terminatorstring的字符。 此外,filter应该在$chars限制之下的第一个字边界处切割,例如 $in = "Answer to the Ultimate Question of Life, the Universe, and Everything."; $out = "Answer to the Ultimate Question of Life, the …"; 我很确定这应该与这些步骤一起工作 从最大字符中减去终止符中的字符数量 […]