#python #python-3.x #unicode
Вопрос:
Я попытался создать код для имитации регистра.
Пользователь, например, выбирает «создать учетную запись» и вводит имя пользователя и пароль в текст с именем username.txt
Эта часть работает, но теперь я попытался зашифровать пароль, но я сократил:
«Файл «C:ProgramFilesWindowsAppsPythonSoftwareFoundation.Python.3.9_3.9.2032.0_x64__qbz5n2kfra8p0libencodingscp1252.py», строка 19, в кодировке кодеки возврата.charmap_encode(ввод,собственные ошибки,таблица кодирования)[0] Ошибка UnicodeEncodeError: кодек «charmap» не может кодировать символ «x95» в позиции 2: символ сопоставляется с «неопределенным».
Но если я использую свою программу для шифрования в одиночку, это сработает
мой код:
# coding: utf-8
import colorama
from colorama import Fore, Back, Style
import os
import time
import platform
import shutil
import sys
import _socket
import socket
from Cryptage import *
#-------------------------------------------------------------------------------------------------
cle= open("cle.txt","r", encoding="utf-8")
cle=cle.read()
colorama.init(autoreset = True)
Boucle = 1
Pseudo = ""
encoded_string = ''
#-------------------------------------------------------------------------------------------------
def Clean():
if platform.system() == "Windows":
os.system("cls")
elif platform.system() == "Linux":
os.system("clear")
#-------------------------------------------------------------------------------------------------
def Acceuil():
Clean()
print(Fore.BLUE "<===ACCEUIL===>")
print(Fore.BLUE "---------------------------------------------------------------------")
print(Fore.BLUE "1. Se connecter")
print(Fore.BLUE "2. S'inscrire")
print(Fore.BLUE "3. Quitter")
print(Fore.BLUE "---------------------------------------------------------------------")
choix = input()
if choix =='1':
Connexion()
elif choix =='2':
Register()
elif choix =='3':
Clean()
print("Fin du programme...")
time.sleep(2.4)
sys.exit()
else:
Clean()
print(Fore.RED "invalide")
colorama.init(autoreset = True)
#-------------------------------------------------------------------------------------------------
def Register():
Clean()
print(Fore.BLUE "<===INSCRIPTION===>")
print(Fore.BLUE "---------------------------------------------------------------------")
Pseudo, MDP = input(Fore.BLUE "Pseudo, MDP: ").split()
TxtUser = "{Pseudo2}.txt".format(Pseudo2=Pseudo)
CheminBase = "C:\Users\yuris\Desktop\Python\GestionDeCompte\{TxtUser2}".format(TxtUser2=TxtUser)
CheminArriver = "C:\Users\yuris\Desktop\Python\GestionDeCompte\Users\{TxtUser2}".format(TxtUser2=TxtUser)
MDPcrypted = encode(cle, MDP)
if os.path.exists(CheminArriver):
Clean()
print(Fore.RED "Le Pseudo",Fore.RED Pseudo,Fore.RED "Existe deja")
input()
else:
NewUser = open(TxtUser,"x")
NewUser.close()
NewUser = open(TxtUser,"a")
NewUser.write("Pseudo: ")
NewUser.write(Pseudo)
NewUser.write("! ")
NewUser.write("MDP: ")
NewUser.write( MDPcrypted)
NewUser.write("!")
NewUser.close()
shutil.move(CheminBase,CheminArriver)
print(Fore.BLUE "Déplacement vers connexion...")
time.sleep(2.4)
Connexion()
#-------------------------------------------------------------------------------------------------
def Connexion():
Clean()
print(Fore.BLUE "<===CONNEXION===>")
print(Fore.BLUE "---------------------------------------------------------------------")
Pseudo, MDP = input(Fore.BLUE "Pseudo, MDP: ").split()
print(Fore.BLUE "---------------------------------------------------------------------")
TxtUser = "{Pseudo2}.txt".format(Pseudo2=Pseudo)
CheminArriver = "C:\Users\yuris\Desktop\Python\GestionDeCompte\Users\{TxtUser2}".format(TxtUser2=TxtUser)
if os.path.exists(CheminArriver) :
MDPregister = "{MDP2}!".format(MDP2=MDP)
UserConnect = open(CheminArriver,"r")
for ligne in UserConnect:
if MDPregister in ligne:
MenuPrincipal()
else:
print(Fore.RED "Le Pseudo ou le MDP est invalide")
input()
else:
print(Fore.RED "Le Pseudo ou le MDP est invalide")
input()
#-------------------------------------------------------------------------------------------------
def MenuPrincipal():
while Boucle != 0:
Clean()
print(Fore.GREEN "Bienvenue",Fore.GREEN Pseudo)
input()
#-------------------------------------------------------------------------------------------------
while Boucle != 0:
Acceuil()
print("")
И это моя программа для шифрования пароля:
# coding: utf-8
# vigenere cipher
#--------------------------------------------------------------------------------
cle= open("cle.txt","r", encoding="utf-8")
cle=cle.read()
#--------------------------------------------------------------------------------
def encode(cle, string):
encoded_chars = []
for i in range(len(string)):
key_c =cle[i % len(cle)]
encoded_c = chr(ord(string[i]) ord(key_c) % 256)
encoded_chars.append(encoded_c)
encoded_string = ''.join(encoded_chars)
return encoded_string
def decode(cle, string):
encoded_chars = []
for i in range(len(string)):
key_c = cle[i % len(cle)]
encoded_c = chr((ord(string[i]) - ord(key_c) 256) % 256)
encoded_chars.append(encoded_c)
encoded_string = ''.join(encoded_chars)
return encoded_string
(Повторно:Программа Изменена)
Ответ №1:
Ваша первая строка должна гласить # coding: utf-8
или coding=utf-8
(вынуть en
), или указать, когда вы читаете в cle
этом cle = open("cle.txt", "r", encoding="utf-8")
. Вы используете кодек, отличный от utf-8.
Комментарии:
1. Это не работает
2. Я вижу изменения в вашем вопросе; мне трудно воспроизвести ошибку, которую вы получаете (это работает для меня), так как у вас, похоже, есть некоторые локальные модули, импортированные и используемые в вашем коде. Можете ли вы создать воспроизводимый пример первого блока кода, который вы опубликовали?
3. Первая строка указывает кодировку исходного файла и не имеет ничего общего с чтением других файлов. Кодировка по умолчанию для исходного файла Python 3 в любом случае является UTF-8, поэтому строка не нужна.
encoding
также действует для этой строки. См.раздел Объявления кодировки .