从韩国网站下载文件时,文件名经常被错误编码/解码,最终变得混乱不堪。我发现通过用iso-8859-1编码并用euc-kr解码,我可以解决这个问题。然而,我有一个新问题,看起来一样的角色实际上是不同的。看看Python shell的下面:
>>> first_string = 'â'
>>> second_string = 'â'
>>> len(first_string)
1
>>> len(second_string)
2
>>> list(first_string)
['â']
>>> list(second_string)
['a', '̂']
>>>
可以使用“iso-8859-1”对第一个字符串进行编码。后者并非如此。因此,问题是:
第二个\u字符串
转换为第一个\u字符串
)谢谢你。
>
在Unicode中,重音和分隔符有不同的表示形式。代码点U 00E2处有一个字符,以及由Python 2.7中的U'a\u0302'
创建的组合扬抑重音(U 0302)。它由两个字符组成:a和扬抑符。
不同表述的一个可能原因是,网站的创建者从不同的来源复制了文本。例如,PDF文档通常使用两个复合字符显示元音和重音标记,而在键盘上键入这些字符通常会产生单字符表示。
您可以最大限度地使用
unicodedata。规范化
将组合字符转换为单个字符,例如:
from unicodedata import normalize
s = u'a\u0302'
print s, len(s), len(normalize("NFC", s))
将输出
–21
。
>
要想知道一个角色到底是什么,一个简单的方法是询问vim。将光标放在字符上,然后键入ga
以获取有关该字符的信息。
第一个是:
<â> 226, Hex 00e2, Octal 342
第二点:
<a> 97, Hex 61, Octal 141 < ̂> 770, Hex 0302, Octal 1402
换句话说,第一个字符是完整的“带扬抑符的a”字符,第二个字符是规则的a,后跟扬抑符组合字符。
询问网站运营商。我们怎么知道?!
你需要把组合字符变成常规字符的东西。例如,谷歌搜索就得出了这个问题。
正如您在评论中指出的,以及clemens在另一个回答中指出的,在Python中,您可以使用Unicode数据。以“NFC”为形式进行规范化。
问题内容: 如果我想要一个由character实例组成的对象,是否可以在Java中做到这一点呢? 我们可以做得更好吗?就是想。 问题答案: 这段代码完全没错…但是也许您可以使用:
问题内容: 如果输入参数是字节数组-byte [],则dll的本机方法可在Java中使用。如果我们使用c#中的相同方法,则会抛出EntryPointNotFoundException。 是因为java和c#中的byte []是不同的东西吗?如果是这样,我应该如何使用c#中的本机函数? 问题答案: Java缺少无符号类型。特别是,Java缺少无符号字节的原始类型。Java字节类型是带符号的,而C#字
基本上,我试图比较两个字符串,如下所示; 当用户点击我的“加入”按钮并从textmeshpro输入字段获取房间名称时,OnJoinRoom会触发。总之,我尝试创建room和其他用户类型room名称和连接。当我尝试创建名称为“123”的room并加入“normalString”时,它加入了该room。但当我从roomName获得值并尝试加入时,它失败了。我确定我在输入字段中输入了“123”。下面是控
问题内容: 我的数据库中有文本。我从xhr向我的视图发送一些文本。函数查找找不到某些Unicode字符。 我想使用以下方式找到选定的文本: 但有时变量“选择”包含如下字符: 而在变量“文本”中有: 它们只是同一事物的不同形式。在这里如何使工作更可靠? 问题答案: 这可能对您有帮助。 基本上,如果您对来自db的数据进行规范化,并且将选择规范化为相同的形式,那么使用,(即)和朋友时应该会得到更好的结果
返回字符串的字节长度。 将给定的字符串转换为Blob Object并查找其 size 。 const byteSize = str => new Blob([str]).size; byteSize('