相关疑难解决方法(0)

获取UTF-8编码的std :: string的实际长度?

我的std :: string是utf-8编码所以很明显,str.length()返回错误的结果.

我发现了这些信息,但我不确定如何使用它来执行此操作:

以下字节序列用于表示字符.要使用的序列取决于字符的UCS代码编号:

   0x00000000 - 0x0000007F:
       0xxxxxxx

   0x00000080 - 0x000007FF:
       110xxxxx 10xxxxxx

   0x00000800 - 0x0000FFFF:
       1110xxxx 10xxxxxx 10xxxxxx

   0x00010000 - 0x001FFFFF:
       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Run Code Online (Sandbox Code Playgroud)

如何找到UTF-8编码的std :: string的实际长度?谢谢

c++ algorithm

32
推荐指数
5
解决办法
3万
查看次数

Mac OS X中文件系统的Unicode编码在Python中不正确?

在OS X和Python中对Unicode文件名进行了一些努力.我试图在代码中稍后使用文件名作为正则表达式的输入,但文件名中使用的编码似乎与sys.getfilesystemencoding()告诉我的不同.请使用以下代码:

#!/usr/bin/env python
# coding=utf-8

import sys,os
print sys.getfilesystemencoding()

p = u'/temp/s/'
s = u'åäö'
print 's', [ord(c) for c in s], s
s2 = s.encode(sys.getfilesystemencoding())
print 's2', [ord(c) for c in s2], s2
os.mkdir(p+s)
for d in os.listdir(p):
  print 'dir', [ord(c) for c in d], d
Run Code Online (Sandbox Code Playgroud)

它输出以下内容:

utf-8
s [229, 228, 246] åäö
s2 [195, 165, 195, 164, 195, 182] åäö
dir [97, 778, 97, 776, 111, 776] åäö
Run Code Online (Sandbox Code Playgroud)

因此,文件系统编码是utf-8,但是当我使用它编码我的文件名时,它与我创建具有相同字符串的目录名称不同.我希望当我使用我的字符串åäö创建一个目录,然后读回它的名字时,它应该使用相同的代码,就像我直接应用编码一样.

如果我们查看代码点97,778,97,776,111,776,它基本上是加上变音符号的ASCII字符,例如o +¨=ö,这使得它成为两个字符,而不是一个字符.如何避免这种差异,Python中是否存在一种与OS X匹配此行为的编码方案,为什么getfilesystemencoding()不能给我正确的结果?

还是我搞砸了?

python filesystems unicode macos file-io

16
推荐指数
2
解决办法
7375
查看次数

String.normalize() 有什么意义?

在回顾 JavaScript 概念时,我发现String.normalize(). 这并没有出现在 W3School 的“ JavaScript String Reference ”中,因此,这就是我之前可能错过的原因。

我在HackerRank中找到了更多有关它的信息,其中指出:

返回一个字符串,其中包含调用字符串值的 Unicode 规范化形式。

举个例子:

var s = "HackerRank";
console.log(s.normalize());
console.log(s.normalize("NFKC"));
Run Code Online (Sandbox Code Playgroud)

具有作为输出:

HackerRank
HackerRank
Run Code Online (Sandbox Code Playgroud)

另外,在GeeksForGeeks中:

string.normalize() 是 javascript 中的内置函数,用于返回给定输入字符串的 Unicode 规范化形式。

举个例子:

<script> 
  
  // Taking a string as input. 
  var a = "GeeksForGeeks"; 
    
  // calling normalize function. 
  b = a.normalize('NFC') 
  c = a.normalize('NFD') 
  d = a.normalize('NFKC') 
  e = a.normalize('NFKD') 
    
  // Printing normalised form. 
  document.write(b +"<br>"); 
  document.write(c +"<br>"); 
  document.write(d +"<br>"); 
  document.write(e); 
    
</script> 
Run Code Online (Sandbox Code Playgroud)

具有作为输出:

GeeksForGeeks
GeeksForGeeks …
Run Code Online (Sandbox Code Playgroud)

javascript string unicode normalization

14
推荐指数
2
解决办法
2万
查看次数

java中的字节数组和字符串

        byte arr[] = new byte[] {56, 99, 87, 77, 73, 90, 105, -23, -52, -85, -9, -55, -115, 11, -127, -127};
        String s= new String(arr);
        Arrays.equals(arr, s.getBytes()));  // returns false

Run Code Online (Sandbox Code Playgroud)

为什么数组不相等?我希望getBytes()返回原始字节数组。

java arrays

3
推荐指数
1
解决办法
3148
查看次数