【问题标题】:Trying To Create Table To Braille In Python尝试在 Python 中创建盲文表
【发布时间】:2021-02-07 07:18:51
【问题描述】:

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

文件“brail.py”,第 16 行 stringToWrite=u"\u"+brail([1,1,1,0,0,0,1,1]) ^ SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape

我当前的代码是

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") 时它可以工作,但是当我执行一个应该返回完全相同的东西的函数时它会出错。

Image Of Code Just In Case

【问题讨论】:

  • 你能修复代码的缩进吗?如果您发布的整个代码块是您的函数的一部分,则包括 fileWrite=open() 和之后的所有内容都不会运行(它在 return 语句之后)。
  • 抱歉,由于某种原因,我修复了缩进,stackoverflow 搞砸了

标签: python unicode braille


【解决方案1】:

\uPython literal strings 的 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)

【讨论】:

  • 有什么办法让它可以从函数中取出四个字符,这将非常有帮助,因为我需要它来从提供的数字集中制作Unicode字符。跨度>
  • @Joshua66252:查看我的不需要字符串操作的更新。
  • 您知道如何将答案标记为正确吗?编辑:等待弄清楚
  • 等一下,很抱歉再次将其标记为不正确,但是当我将 10299 输入到 chr 函数中时,它会输出 та╗ 它应该何时输出⠻ 你知道我该如何解决这个问题吗? @mhawke
  • 它对我有用,所以可能是您的终端显示问题。你的终端编码是什么? print(sys.getdefaultencoding())。您可以通过以下方式检查该值:unicodedata.name(chr(10299)) is BRAILLE PATTERN DOTS-12456
【解决方案2】:

你可以重写

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”。

【讨论】:

  • 这使得文件说 \u28c7 目前我希望文件具有字符⣇
【解决方案3】:
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

【讨论】:

  • 有效的答案,但您不能接受超过 1 个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2020-08-31
  • 2018-12-18
  • 1970-01-01
相关资源
最近更新 更多