当前位置: 首页 > 知识库问答 >
问题:

相同字符、不同长度和字节[重复]

东门修文
2023-03-14

从韩国网站下载文件时,文件名经常被错误编码/解码,最终变得混乱不堪。我发现通过用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”对第一个字符串进行编码。后者并非如此。因此,问题是:

  1. 这两个字符串之间有什么区别
  2. 为什么从同一个网站下载的内容会有不同格式的相同字符?(如果这就是区别所在。)
  3. 我怎样才能解决这个问题?(例如,将第二个\u字符串转换为第一个\u字符串

谢谢你。

共有2个答案

王昊
2023-03-14

>

  • 在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

  • 陆洛城
    2023-03-14

    >

  • 要想知道一个角色到底是什么,一个简单的方法是询问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('