Я собирался читать из файла или стандартного ввода, поэтому написал ниже код. Читает из файла по fileinput (имя_файла), если Debug истинно, и fileinput (), если нет. Странно то, что когда я печатаю «строку», она хорошо печатается в выходном файле. Однако, когда я получаю символ из строки по индексу или проверяю строку при прерывании отладки, он выглядит как «癤 풵 UBWEWUB», а правильный ввод - «WUBWEWUB» (это содержимое входного файла).

import os
import sys
import psutil
import fileinput

if __debug__:
    Debug = True
    import defs
else: Debug = False
if(Debug == True):
    def memory():
        pass

    inputFilePath = os.path.join(defs.IO_Dir, "input.txt")
    inf = open(inputFilePath, "r")
    outf = open(os.path.join(defs.IO_Dir, "output.txt"), "w")
    logf = open(os.path.join(defs.IO_Dir, "log.txt"), "a")
    logf.write(f"Program started at : {gettime()}\n")
    def write(str):
        print(str, file = outf)
        pass
    inval = inputFilePath
    sys.stdout = outf
    pass
else:
    inval = None
    pass
if(Debug): print("Start------------------------")
for x in fileinput.input(inval):
    line = x.strip()
    if(line == "Exit"):
        break
    ans = ""
    i = 0
    l = 3
    print(type(line))
    print(type(line[0]))
    for i in range(2, len(line) - 3):
        if(line[i] == 'W' and line[i+1] == 'U' and line[i+2] == 'B'):
            if(i + 3 == len(line)):
                break
                pass
            l = i + 3
            if(ans[-1] != ' '):
                ans = ans + " "
            pass
        elif(i >= l):
            ans = ans + line[i]
            pass
        pass
    pass
print(ans)
print(line)
if(Debug): print("End------------------------")

Выходной файл:

Start------------------------
<class 'str'>
<class 'str'>
BWE 
WUBWEWUB
End------------------------

Я ожидал, что это проблема с кодировкой, но тип строки просто «str», и я не могу понять, почему там странная буква.

0
이시인 23 Июн 2017 в 14:47
1
Возможно, в вашем файле (ах) есть заголовок спецификации. Проверьте их с помощью шестнадцатеричного редактора.
 – 
Jean-François Fabre
23 Июн 2017 в 14:54
Вероятно, вы захотите узнать, какая кодировка используется для (текстовых) файлов в вашей системе. Похоже, что входной и выходной файл используют одну и ту же кодировку, но не на терминале, или наоборот.
 – 
user707650
23 Июн 2017 в 14:59
@ Jean-FrançoisFabre спасибо! заголовок был включен в индекс 0 и 1, и это нарушило логику, поэтому теперь я удалил, изменив кодировку на utf-8 без bom.
 – 
이시인
23 Июн 2017 в 18:09

1 ответ

Лучший ответ

Текстовый файл имеет заголовок BOM и был включен в нарезку (строка [0], строка [1]). Я использовал визуальную студию и удалил заголовок спецификации, сохранив как utf 8 без подписи.

0
이시인 23 Июн 2017 в 18:16