0

我一直在尝试创建一个系统,将 1 和 0 的表变成盲文字符,但它一直给我这个错误

文件“brail.py”,第 16 行 stringToWrite=u"\u"+brail([1,1,1,0,0,0,1,1]) ^ SyntaxError: (unicode error) 'unicodeescape' codec can' t 解码位置 0-1 中的字节:截断 \uXXXX 转义

我当前的代码是

def brail(brailList):
    if len(brailList) == 8:
        brailList.reverse()
        brailHelperList=[0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1]
        brailNum=0x0
        for num in range(len(brailList)):
            if brailList[num] == 1:
                brailNum+=brailHelperList[num]
        stringToReturn="28"+str(hex(brailNum))[2:len(str(hex(brailNum)))]
        return stringToReturn
    else:
        return "String Needs To Be 8 In Length"

fileWrite=open('Write.txt','w',encoding="utf-8")
stringToWrite=u"\u"+brail([1,1,1,0,0,0,1,1])
fileWrite.write(stringToWrite)
fileWrite.close() 

它在我做的时候有效,fileWrite.write(u"\u28c7")但是当我做一个应该返回完全相同的东西的函数时,它会出错。

以防万一的代码图像

4

3 回答 3

1

\uPython 文字字符串的 Unicode 转义序列。一个 4 十六进制数字的 unicode 代码点应遵循转义序列。如果代码点丢失或太短,则为语法错误。

>>> '\u28c7'
'⣇'

>>> '\u'
  File "<stdin>", line 1
    '\u'
        ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape

如果您使用的是 Python 3,则u不需要字符串前缀,因为字符串在内部存储为 unicode。u维护前缀是为了与 Python 2 代码兼容。

这就是异常的原因,但是,您不需要像那样构造 unicode 代码点。您可以使用ord()chr()功能:

    from unicodedata import lookup
    braille_start = ord(lookup('BRAILLE PATTERN BLANK'))
    return chr(braille_start + brailNum)
于 2021-02-07T07:37:44.200 回答
0

你可以重写

stringToWrite=u"\u"+brail([1,1,1,0,0,0,1,1])

作为

stringToWrite="\\u{0}".format(brail([1, 1, 1, 0, 0, 0, 1, 1]))

Python 3 中的所有字符串都是 unicode,因此您不需要前导“u”。

于 2021-02-07T07:47:14.263 回答
-1
def braille(brailleString):
    brailleList = []
    brailleList[:0]=brailleString
    if len(brailleList) > 8:
        brailleList=brailleList[0:8]
    if len(brailleList) < 8:
        while len(brailleList) < 8:
            brailleList.append('0')
    brailleList1=[
    int(brailleList[0]),
    int(brailleList[1]),
    int(brailleList[2]),
    int(brailleList[4]),
    int(brailleList[5]),
    int(brailleList[6]),
    int(brailleList[3]),
    int(brailleList[7]),
    ]
    brailleList1.reverse()
    brailleHelperList=[128,64,32,16,8,4,2,1]
    brailleNum=0
    for num in range(len(brailleList1)):
        if brailleList1[num] == 1:
            brailleNum+=brailleHelperList[num]
    brailleStart = 10240
    return chr(brailleStart+brailleNum)
fileWrite=open('Write.txt','w',encoding="utf-16")
fileWrite.write(braille('11111111'))
fileWrite.close()

# Think Of The Braille Functions String Like It Has A Seperator In The Middle And The 1s And 0s Are Going Vertically
于 2021-02-07T11:02:40.510 回答