Содержание
- VS + Python + кириллица, ошибка в консоли, как решить?
- Visual Studio Community 2022 — UTF-8 codec problem #6784
- Comments
- Original Comments
- Feedback Bot on 11/9/2021, 11:32 PM:
- Original Solutions
- Visual studio unicode error python
- Python print unicode generate error in output window #6269
- Comments
- Python-сообщество
- Уведомления
- #1 Март 1, 2016 09:58:59
- русский текст в консоли
- #2 Март 1, 2016 10:32:12
- русский текст в консоли
- #3 Март 1, 2016 10:55:43
- русский текст в консоли
- #4 Март 1, 2016 12:47:06
- русский текст в консоли
- #5 Март 1, 2016 18:04:37
- русский текст в консоли
- #6 Март 1, 2016 22:02:52
- русский текст в консоли
- #7 Март 1, 2016 22:05:16
- русский текст в консоли
VS + Python + кириллица, ошибка в консоли, как решить?
Всем привет!
Ради интереса поставил Python 3.5.1 -(решил посмотреть что это за язык, много слышал про него)
Так вот, когда выводишь программу в консоли у меня возникает ошибка, как я понял из-за русского языка и из-за кодировки. Когда пишешь на инглише все норм — конечно можно писать все на нем! и забить на проблему. Но, все-таки мы же русские ) и хочется сообщения писать на своем родном языке.
Погуглил данную тему, у многих людей на многих языках программирования возникает проблема именно из-за русских букв, все решают данную проблему по разному.
Господа! вопрос как решить мою проблему ?
Спасибо.
- Вопрос задан более трёх лет назад
- 34852 просмотра
Что удалось нарыть.
А.
если поставить в начале кода такую конструкцию:
# -*- coding: cp1251 -*-
То начинает все работать, как я понял это принудительное перекодирование файла — (буду благодарен если точнее объясните господа)
Б.
(как я понял)
Файл нужно создавать в нужной кодировке utf8
По умолчанию Visual Studio создает файлы в другой кодировки, надо понять где это поменять / проверить / потестить.
Да, все верно! в Visual Studio идем Файл — Дополнительные параметры сохранения
и ставим так(скрин) все начинает работать..
Но это не спасает от такой записи. (скрин) вопрос остается что делать ?
Ради теста, напрямую запустил консоль python — а ввел там нужную команду все норм отобразилось!
Да что не так с этой чертовой VS ?
Источник
[regression] [worked-in:Visual Studio Community 2019]
Today I have Visual Studio Community 2022 (64-bit) – Current Version 17.0.0 installed, including the Python extension.
When executing Python code that contains German special characters (ä, ö, ü), the debugger aborts with the following error message:
„SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xe4 in position 7: invalid continuation byte“
The problem is not related to the Python interpreter or the code. The code runs flawlessly with Visual Studio 2019 and VS Code. Debugging also works fine with Visual Studio 2019.
Is there a new UTF-8 encoding setting in Visual Studio 2022 that I missed?
I thank you for your help.
Feedback Bot on 11/9/2021, 11:32 PM:
We have directed your feedback to the appropriate engineering team for further evaluation. The team will review the feedback and notify you about the next steps.
Original Solutions
The text was updated successfully, but these errors were encountered:
Can you share the full traceback associated with the error message in the terminal?
For me is the same, if use ñ letter in Spanish in a variable name when execute it, says: SyntaxError: invalid character in identifier
And the ñ character has been substituted for a like-square character:
The original definition is:
In VS 2019 was ok and VS Code it’s OK too.
My version of VS 2022 is 17.0.1
In C# there is no problem using the ñ character. But in Python doesn’t work.
Same problem with Cyrillic symbols. Not just in «.py» files, but also in Flask «.html» templates
PythonEncodingDetector in this file does not get invoked when creating new python files. Might be a MEF issue.
I took a quick look at it from VS side of things, and when the file gets loaded and encoding detection kicks in, its ContentType is , so our detector isn’t considered at all. This is possibly something that has changed in VS 2022, since there are no obvious corresponding changes in PTVS.
Either way, further investigation needs to figure out why the content type is not assigned at the right time despite the .py extension.
Some updates to add based on conversations with Pavel and Oleg:
In VS 2019, the older version of PTVS used to explicitly set the encoding of the document before text document is loaded, but the current one does not. However, since the VS side knows the filename, they should to be able to determine the content type without us having to explicitly set it. So it’s a design bug as it wasn’t properly documented.
Have VS team use the content type registration info to set the appropriate content type for newly created document instances.
Have VS team default to UTF-8 in the absence of decoders, on the basis that it’s more likely to be a correct guess. But it doesn’t really help us, since we still need to handle Python «coding» comments — we need the detector to kick in.
Look up the method names in the stack that comes from the older version of PTVS, figure out where those lines of code should go in current source to reproduce the old behavior.
@int19h Pavel, is there anything else you’d like to add?
Источник
Visual studio unicode error python
Вообщем ситуация такая. Решил я поизучать Python. Посмотрел разные среды разработки, и решил остановиться на уже знакомой и уютненькой Visual Studio, тем более, что по работе в основном на C# писать приходится, установлена, удобная, привычная. Короче приступил к написанию своего первого Hello World-а.
Написал вот такое:
И вместо русских букв в консоли увидел кракозябры. 🙁
Покопав немного «интернеты», нашёл рекомендацию указывать кодировку в начале файла так:
Сделал, не помогло… 🙁
Стал копать дальше.
Студия фалы сохраняет по умолчанию в кодировке Win1251 — ага. подумал я.
Правим:
File -> Advanced Save Options
Это действие уже помогло, но лишь частично. По команде print русский текст стал выводиться корректно. А вот текст в команде input остался кракозябрами.
Но и этой проблеме решение есть:
Tools -> Options -> Pyton Tools -> Debugging
Убираем галочку «Tee program output to Debug Output window»
После этого действия всё работает корректно, буквы русские во всех случаях.
Мне помогло, надеюсь и вам поможет.
Источник
Python print unicode generate error in output window #6269
- VSCode Version:1.1
- OS Version:Win7 64bit, Python 2.7.8
Steps to Reproduce:
Source:
Output:
上海
Traceback (most recent call last):
File «d:Temptmp2.py», line 7, in
print(unicode_name) # This line generate error
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)
The text was updated successfully, but these errors were encountered:
@bpasero do you think this is the issue with our output decoding or the editor?
This sounds like an error in his python program.
@sun1991 Do you get the same error if you run your python program outside of vscode?
@isidorn Tried the same code in IDLE, no error happen. The way IDLE treated it is:
print(utf8_name) -> output utf-8 bytes interpreted by local non-unicode setting, althrough not useful (not human readable)
print(unicode_name) -> output correct characters, because it is unicode after all.
I think the way IDLE handle makes more sense. After all, for python 2.7, utf8_name is just byte array, if encoding is not know, then it is just some bytes. But unicode_name is. unicode code point, so it should always precisely know what its representation should be.
But VS Code output window did reverse, looks like it interpreted bytes as utf-8 bytes, but report error on unicode.
@sun1991 thanks for providing additional information. What happens when you execute your pything script in the command prompt?
@isidorn This is what looks like in console, the output is the same from what on IDLE.
C:Usersabc>python
Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on win
32
Type «help», «copyright», «credits» or «license» for more information.
>>> unicode_name = u’上海’
>>> utf8_name = unicode_name.encode(‘utf-8’)
>>> print(utf8_name)
涓婃捣
>>> print(unicode_name)
上海
win8.1/ VSC1.1/python3.5 — bug is reproduced
IDLE — all correct
But VSC is not IDE or сompiler, what are extension for python debugging you use?
Bug perhaps between VSC & extension or extension & python, if first — MS, we need solve 🙂
If you use ext by Don Jayamanne, he is having not closed issue about that [iss#102]
Hi, I have updated the original issue #102 with some additional information. I believe this is a problem lies with how the default encoding is picked up by Python when launched from NodeJs.
I’m closing this issue as this was an issue with the Python extension itself and the issue has now been resolved #102.
If the issue still persists, please re-open the issue in Python repo
Источник
Python-сообщество
Уведомления
#1 Март 1, 2016 09:58:59
русский текст в консоли
Здравствуйте. Я только начинаю изучать Phyton. Возникли трудности при выводе простеньких команд на консоль. В одной строке вылазят крякозябры, тогда как в остальных всё нормально. Работаю в Visual Studio 2015 Community, так как привык к этой IDE. Ниже сам код с проблемой:
# -*- coding: utf-8 -*-
a = 70;
b = int (input (‘введите целое число:’))
if b == a:
print (‘поздравляю, вы угадали!’ , ‘Хотя и не получили никакого приза за это’)
elif b a:
print (‘Нет, введённое число меньше’)
Собственно крякозябры выходят в строке ВВЕДИТЕ ЦЕЛОЕ ЧИСЛО, символы в ней кодируются непонятно в
чём. Я целых два дня искал решение этой проблемы в интернете, но так и не нашёл. Никакие .encode(‘utf-8’) подставляемые в конце строки с разными кодировками не помогают, меняются только крякозябры, но русские буквы упорно не желают выдаваться консолью.
Есть ли вообще решение этой проблемы под Windows? Если кто знает, подскажите пожалуйста начинающему питонисту.
#2 Март 1, 2016 10:32:12
русский текст в консоли
Версия питона 3?
Сам файл с исходным кодом точно кодирован в заявленные UTF-8 ?
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#3 Март 1, 2016 10:55:43
русский текст в консоли
JOHN_16
Версия питона 3?Сам файл с исходным кодом точно кодирован в заявленные UTF-8 ?
#4 Март 1, 2016 12:47:06
русский текст в консоли
Пока что делайте перед input отдельный print с приглашением ввести число. А я посмотрю попозже откуда такая проблема.
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#5 Март 1, 2016 18:04:37
русский текст в консоли
JOHN_16
Пока что делайте перед input отдельный print с приглашением ввести число. А я посмотрю попозже откуда такая проблема.
Отредактировано Leon0x1 (Март 1, 2016 18:05:41)
#6 Март 1, 2016 22:02:52
русский текст в консоли
ну так показывайте код и ошибку. Это же вы ошиблись, а не попытка сделать невозможное
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#7 Март 1, 2016 22:05:16
русский текст в консоли
Leon0x1
К сожалению интерпретатор не позволяет этого сделать, выдаёт синтаксическую ошибку.
Отредактировано doza_and (Март 1, 2016 22:05:59)
Источник
-19 / 0 / 0 Регистрация: 13.04.2013 Сообщений: 26 |
|
1 |
|
13.02.2022, 22:31. Показов 7216. Ответов 9
Питон в Visual-studio 2022 не признаёт кирилицу даже внутри кавычек. Можно ли его уговорить этого не делать?
__________________
0 |
16 / 16 / 2 Регистрация: 23.02.2012 Сообщений: 132 |
|
14.02.2022, 12:52 |
2 |
Попробуй в начале файла написать:
0 |
-19 / 0 / 0 Регистрация: 13.04.2013 Сообщений: 26 |
|
14.02.2022, 18:04 [ТС] |
3 |
SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xea in position 0: invalid continuation byte
0 |
16 / 16 / 2 Регистрация: 23.02.2012 Сообщений: 132 |
|
14.02.2022, 20:27 |
4 |
У меня во всех исходниках в проекте первой строкой прописано И все ошибки исчезли. Нужно, что бы эта строка была во всех файлах проекта.
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
14.02.2022, 20:37 |
5 |
# coding=windows-1251 Эта декларация давно уже не нужна. Степень подробности с какой топикстартер объясняет свою проблему просто впечатляет.
1 |
16 / 16 / 2 Регистрация: 23.02.2012 Сообщений: 132 |
|
14.02.2022, 21:23 |
6 |
Давай тогда свое решение, как VS 2022 заставить работать без этой декларации. По умолчанию VS работает в win 1251. Дал простое решение проблемы. Чем понты кидать — дай простое решение проблемы. Или ума не хватит? Добавлено через 8 минут
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
14.02.2022, 22:58 |
7 |
Или ума не хватит? Я не знаю о чьем уме ты говоришь. Вероятно, что о своем.
По умолчанию VS работает в win 1251 Что такое VS? VS Code или MSVS? В любом случае это ложь: Также в документации MSVS написано: Про VS Code:»Кодировка VS Code по умолчанию — UTF-8 без метки порядка байтов.« P.S. C тех пор как в Python официальная кодировка исходников объявлена как utf-8, использование локальных кодовых страниц для кодирования исходников считается bad practice.
0 |
16 / 16 / 2 Регистрация: 23.02.2012 Сообщений: 132 |
|
15.02.2022, 07:16 |
8 |
Ты запусти MSVS 2022 и создай проект из нескольких исходников. А потом пиши тут свои догадки. Я перед тем, как ответить челу с его проблемой, которая прекрасно описана, но некоторым особам тяжело вникать, пока им по полочкам не разложишь, проверил. Файлы создаются в 1251 кодировке. Добавлено через 10 минут
Также в документации MSVS написано: Не каждый начинающий знает, где прописывать параметры MSVS. Был дан наипростейший способ обойти проблему.
P.S. C тех пор как в Python официальная кодировка исходников объявлена как utf-8, использование локальных кодовых страниц для кодирования исходников считается bad practice. А вот тут я тебя забыл спросить.
Я не знаю о чьем уме ты говоришь. Вероятно, что о своем. Ты видимо зациклен на своем utf-8. Флаг тебе в руки. p.s. Как вы задолбали, диванные спецы. Стырят старый API, под себя сделают и звезды. Можно сказать, сами все сделали.
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
15.02.2022, 14:20 |
9 |
Ты видимо зациклен на своем utf-8. Он не мой. Его придумал Роб Пайк. И теперь его использует весь мир. Но, ты, видимо не в курсе.
Не каждый начинающий знает, где прописывать параметры MSVS. Не смеши меня. Таким начинающим сначала нужно батники писать научиться прежде чем в программирование лезть.
А вот тут я тебя забыл спросить. В следующий раз не забудь. ОК? Добавлено через 1 минуту
диванные спецы. С Ты опять про себя дорогой? Не слишком ли часто?
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
15.02.2022, 15:37 |
10 |
Питон в Visual-studio 2022 не признаёт кирилицу даже внутри кавычек Признает.
И не надо людям голову морочить. Visual Studio создает файлы исходного кода в кодировке локали текущего пользователя. Это не есть хорошо, ну да ладно. К тому же файл всегда можно пересохранить на utf-8 (меню сохранить как -> сохранить с кодировкой-> выбрать utf-8 без BOM). И тогда никаких проблем с не ASCII символами не будет.
0 |
import traceback
class TestRunner(object):
def __init__(self, name):
self.name = name
self.testNo = 1
def expectTrue(self, cond):
try:
if cond():
self._pass()
else:
self._fail()
except Exception as e:
self._fail(e)
def expectFalse(self, cond):
self.expectTrue(lambda: not cond())
def expectException(self, block):
try:
block()
self._fail()
except:
self._pass()
def _fail(self, e=None):
print(f'FAILED: Test # {self.testNo} of {self.name}')
self.testNo += 1
if e is not None:
traceback.print_tb(e.__traceback__)
def _pass(self):
print(f'PASSED: Test # {self.testNo} of {self.name}')
self.testNo += 1
def match(string, pattern):
if [type(string),type(pattern)]!=[str]*2:raise TypeError
if len(string)!=len(pattern)or set(pattern)-set('ad* '):raise ValueError
m,r=[0]*len(string),1
for i in range(len(string)):m[i]=bool((pattern[i]=='a'and string[i]in[chr(i)for i in range(97,123)])or(pattern[i]=='d'and string[i]in[chr(i)for i in range(48,58)])or(pattern[i]==string[i]==' ')or(pattern[i]=='*'and string[i]in([' ']+[chr(i)for i in range(48,58)]+[chr(i)for i in range(97,123)])))
for i in m:r*=i
return bool(r)
def testMatch():
runner = TestRunner('match')
runner.expectFalse(lambda: match('xy', 'a'))
runner.expectFalse(lambda: match('x', 'd'))
runner.expectFalse(lambda: match('0', 'a'))
runner.expectFalse(lambda: match('*', ' '))
runner.expectFalse(lambda: match(' ', 'a'))
runner.expectTrue(lambda: match('01 xy', 'dd aa'))
runner.expectTrue(lambda: match('1x', '**'))
runner.expectException(lambda: match('x', 'w'))
tasks = {
'id': 0,
'name': 'Все задачи',
'children': [
{
'id': 1,
'name': 'Разработка',
'children': [
{'id': 2, 'name': 'Планирование разработок', 'priority': 1},
{'id': 3, 'name': 'Подготовка релиза', 'priority': 4},
{'id': 4, 'name': 'Оптимизация', 'priority': 2},
],
},
{
'id': 5,
'name': 'Тестирование',
'children': [
{
'id': 6,
'name': 'Ручное тестирование',
'children': [
{'id': 7, 'name': 'Составление тест-планов', 'priority': 3},
{'id': 8, 'name': 'Выполнение тестов', 'priority': 6},
],
},
{
'id': 9,
'name': 'Автоматическое тестирование',
'children': [
{'id': 10, 'name': 'Составление тест-планов', 'priority': 3},
{'id': 11, 'name': 'Написание тестов', 'priority': 3},
],
},
],
},
{'id': 12, 'name': 'Аналитика', 'children': []},
],
}
def findTaskHavingMaxPriorityInGroup(tasks, groupId):
# ------------------------------------------------------------------------------------------------
def search_group(id, tasks):
if tasks['id'] == id:
search_max(tasks)
return 1
search_group2(id, tasks)
def search_group2(id, tasks):
if 'children' in tasks:
_ = tasks['children']
for pot in _:
if pot['id'] == id:
search_max(pot)
return 0
if 'children' in pot:
search_group2(id, pot)
def search_max(tasks):
global flag
if 'priority' in tasks:
raise Exception("not a group")
if tasks['children'] == []:
flag = None
return 0
search_max2(tasks)
def search_max2(tasks):
if 'children' in tasks:
_ = tasks['children']
for pot in _:
if 'priority' in pot:
if pot['priority'] > max['priority']:
max['priority'] = pot['priority']
max['name'] = pot['name']
max['id'] = pot['id']
if 'children' in pot:
search_max2(pot)
max = {'id': 0, 'name':'', 'priority':0,}
global flag
flag = 1
search_group(groupId, tasks)
if flag == None:
return None
if max['name'] == '':
raise Exception("not a group")
return max
# ------------------------------------------------------------------------------------------------
def taskEquals(a, b):
return (
not 'children' in a and
not 'children' in b and
a['id'] == b['id'] and
a['name'] == b['name'] and
a['priority'] == b['priority']
)
def testFindTaskHavingMaxPriorityInGroup():
runner = TestRunner('findTaskHavingMaxPriorityInGroup')
runner.expectException(lambda: findTaskHavingMaxPriorityInGroup(tasks, 13))
runner.expectException(lambda: findTaskHavingMaxPriorityInGroup(tasks, 2))
runner.expectTrue(lambda: findTaskHavingMaxPriorityInGroup(tasks, 12) is None)
runner.expectTrue(lambda: taskEquals(findTaskHavingMaxPriorityInGroup(tasks, 0), {
'id': 8,
'name': 'Выполнение тестов',
'priority': 6,
}))
runner.expectTrue(lambda: taskEquals(findTaskHavingMaxPriorityInGroup(tasks, 1), {
'id': 3,
'name': 'Подготовка релиза',
'priority': 4,
}))
runner.expectTrue(lambda: findTaskHavingMaxPriorityInGroup(tasks, 9)['priority'] == 3)
testMatch()
testFindTaskHavingMaxPriorityInGroup()
Thread Rating:
- 2 Vote(s) — 3.5 Average
- 1
- 2
- 3
- 4
- 5
UnicodeEncodeError using Windows and IDE-Visual Studio |
Oct-25-2017, 03:06 PM
I am new to Python and excited to learn and just hit the ground. I really have no idea how to correct this error and my enthusiasm for Python might be short lived. Posts: 101 Threads: 7 Joined: Aug 2017 Reputation: Use BBCode to post. Heres my code (python 3.6): >>> import requests >>> result= requests.get('https://www.nytimes.com/interactive/2017/06/23/opinion/trumps-lies.html') >>> print(result.text) It works fine when I use T get an error when I try to use >>> print(result) <Response [200]> >>> print(len(result)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'Response' has no len() but the length of the content works fine. >>> print(len(result.text)) 161117 Posts: 11,568 Threads: 446 Joined: Sep 2016 Reputation:
Please post your error traceback (all of it) as it contains valuable information print(result) # to print (result.text) finally, when posting code use code tags. See BBCODE Yaya33
Posts: 8 Threads: 2 Joined: Oct 2017 Reputation: Oct-25-2017, 07:12 PM
Hi hbknjr, print(result.cookies) print(result.headers) print(result.elapsed) print(result.history) print(result.json) print(result._next) So, I am wondering if the error is the text property or windows console does not have Unicode characters.
Hi Larz60+, File "C:UsersNameAppDataLocalProgramsPythonPython35-32libencodingscp850.py", line 19, in encode The above line looks like a library. return codecs.charmap_encode(input,self.errors,encoding_map)[0] #UnicodeEncodeError: 'charmap' codec can't encode characters in position 63893-63896: character maps to <undefined> Another error return codecs.charmap_encode(input,self.errors,encoding_map)[0] #UnicodeEncodeError: 'charmap' codec can't encode character 'u2014' in position 282: character maps to <undefined> Posts: 1,298 Threads: 38 Joined: Sep 2016 Reputation: A couple of things and questions. First thing is post the entire error code between tags (the red X next to the Python icon on the editor bar), posting one line is not helpful. Question, as a new Python user, why are you not using the latest Python version (currently 3.6.3). Those responses you got from from your search are correct, upgrading Python will eliminate that problem. My advice is to uninstall your v3.5 and install the latest version. Follow our tutorial here https://python-forum.io/Thread-Basic-Par…er-Windows, make sure you obtain the correct file to match your machine, i.e.: 32 or 64 bit.
If it ain’t broke, I just haven’t gotten to it yet. Yaya33
Posts: 8 Threads: 2 Joined: Oct 2017 Reputation:
sparkz_a lot, http://www.dataschool.io/python-web-scraping-of-president-trumps-lies/ Posts: 1,298 Threads: 38 Joined: Sep 2016 Reputation: This is the Python tags for your code. The Python icon
Your errors are referring to unicode errors, which Windows does not support. Windows uses ‘code pages’, in your case it is code page 850 (cp850). Python got tired of waiting for Windows to get on the utf-8 train and fixed it themselves
If it ain’t broke, I just haven’t gotten to it yet. Yaya33
Posts: 8 Threads: 2 Joined: Oct 2017 Reputation:
sparkz_a lot, Posts: 1,298 Threads: 38 Joined: Sep 2016 Reputation: It is one of the icons. If you follow the tutorial link I posted, you won’t end up with that horrendous installation directory, an added bonus
If it ain’t broke, I just haven’t gotten to it yet. Yaya33
Posts: 8 Threads: 2 Joined: Oct 2017 Reputation: Oct-27-2017, 02:09 PM
sparkz_a lot, Thanks again for the all the help! |
Possibly Related Threads… | |||||
Thread | Author | Replies | Views | Last Post | |
[SOLVED] [Debian] UnicodeEncodeError: ‘ascii’ codec | Winfried | 1 | 299 |
Nov-16-2022, 11:41 AM Last Post: Winfried |
|
Visual Studio Code venv ibm_db error | mesi1000 | 7 | 597 |
Nov-13-2022, 12:36 AM Last Post: snippsat |
|
debugging help on Visual Studio Code | mg24 | 12 | 607 |
Oct-02-2022, 12:18 AM Last Post: mg24 |
|
UnicodeEncodeError — Dealing with Japanese Characters | fioranosnake | 2 | 486 |
Jul-07-2022, 08:43 PM Last Post: fioranosnake |
|
Problem with importing Python file in Visual Studio Code | DXav | 7 | 1,396 |
Jun-15-2022, 12:54 PM Last Post: snippsat |
|
UnicodeEncodeError: ‘ascii’ codec can’t encode character ‘xfd’ in position 14: ordin | Armandito | 6 | 1,192 |
Apr-29-2022, 12:36 PM Last Post: Armandito |
|
Visual Studio Code Intellisense for Imported Modules Not Working | hockinsk | 1 | 1,321 |
Apr-23-2022, 04:41 PM Last Post: deanhystad |
|
|
Visual studio code unable to color syntax on python interpreter | tomtom | 4 | 1,587 |
Mar-02-2022, 01:23 AM Last Post: tomtom |
compile error Visual Studio Code | jamie_01 | 2 | 934 |
Jan-25-2022, 09:36 AM Last Post: Larz60+ |
|
UnicodeEncodeError caused by print when program runs from Popen | SheeppOSU | 5 | 1,371 |
Jan-13-2022, 08:11 AM Last Post: SheeppOSU |
Framework Python Flask
Каркас Flask — программная конструкция на языке Python для быстрого создания классических веб-приложений. Фреймворк Flask представляет собой основу для быстрого и легкого запуска разработки сайта с возможностью масштабирования до сложного приложения.
Исходник веб-приложения прикрепленный к данной статье содержит все необходимые пакеты и виртуальную среду, но можно самостоятельно создать веб-проект и от исходника использовать только файлы запуска: app.py и app2.py. Как создать веб-проект Python Flask в Visual Studio читайте на странице Создание веб-проекта приложения Flask.
Простейшее веб-приложение Flask
Минимальное рабочее веб-приложение Flask состоит из небольшого количество кода. Каждое веб-приложение описываемого фреймворка должно иметь объект класса Flask. Встроенный шаблон в Visual Studio создает файл приложения с именем app.py, но можно переименовать файл в любое другое название (кроме flask.py), более подходящее для вашего проекта.
Веб-приложение Flask получает в Visual Studio локальный адрес localhost, установленный в операционной системе Windows по умолчанию. Причем, для автоматического запуска браузера, локальный адрес должен быть установлен в свойствах проекта веб-приложения — вкладка Отладка. Незанятый порт для доступа к веб-приложению выбирается операционной системой случайным образом.
При разработке веб-приложения может быть более удобным другой локальный адрес с постоянным портом. Для такой возможности необходимо щелкнуть правой кнопкой мыши на названии проекта и в контекстном меню выбрать Свойства, в открывшемся окне активировать вкладку Отладка и указать желаемый локальный адрес и порт. После этого приложение будет запускаться только по указанному адресу и номеру порта.
Можно использовать любые локальные адреса зарегистрированные в операционной системы Windows. Как регистрировать локальные URL-адреса можно прочитать на странице Веб сервер IIS Windows, настройки для тестирования сайтов на компьютере. Запуск приложения в отладочном режиме: app.run(HOST, PORT, True)
дает возможность редактировать код без перезапуска сервера разработки Flask.
# ===== Запуск Flask веб-приложения с помощью сервера разработки =====
# Доступ к определению класса Flask
from flask import Flask
# Каждое веб-приложение создает экземпляр класса Flask
app = Flask(__name__)
# Маршрутизатор на основе декоратора запускает функцию hello() по адресу "/"
# Маршрутизатор может запустить любую функцию или даже несколько
@app.route('/')
def hello():
# Вывод html-кода в браузер по указанному
# в маршрутизаторе адресу
return "<h1>Hello World! Привет Мир!</h1>"
if __name__ == '__main__':
import os
# Получение имени хоста для запуска веб-приложения.
# Настраивается в свойствах проекта.
HOST = os.environ.get('SERVER_HOST', 'localhost')
# Если раскомментировать строки ниже
# в окне интерпретатора распечатается список
# переменных среды со значениями.
#print("===== Переменнные среды =====")
#for key in os.environ.keys() :
# print("{0}: {1}".format(key, os.environ[key]), end="n")
#print("===== /Переменнные среды ===== n")
try:
# Номер порта доступа к запущенному веб-приложению.
# Выбирается системой случайным образом.
PORT = int(os.environ.get('SERVER_PORT', '5789'))
except ValueError:
# При ошибке получения порта доступа к веб-приложению
# определяется порт по умолчанию
PORT = 5789
# Запуск сервера разработки в отладочном режиме
app.run(HOST, PORT, True)
Настройка Unicode
Хотя поддержка UTF-8 установлена в фреймворке Flask по умолчанию, запустив приложение с html-кодом содержащим кириллицу или спецсимволы, вместо успешного запуска, в окне интерпретатора можно увидеть подобную ошибку:
File «…FlaskWebProjectEmpty app.py», line 14
return «<h1>Hello World! ������ ���!</h1>»
SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xcf in position 17: invalid continuation byte
Синтаксическая ошибка:(ошибка юникода) Кодек utf-8 не может декодировать байт 0xcf в позиции 17: недопустимый байт продолжения).
Это значит, что кодек Python не смог сопоставить байту 0xcf ни один символ кодировки UTF-8.
Вероятнее всего необходимо изменить кодировку файла app.py на UTF-8. Изменить кодировку текущего файла можно в диалоговом окне из главного меню Visual Studio командами Файл->Сохранить app.py как…. В диалоговом окне нажать на треугольник кнопки сохранения и выбрать Сохранить с кодировкой… и в открывающимся списке выбрать кодировку Юникод(UTF-8, с сигнатурой), кодовая страница 65001. После пересохранения файла в указанной кодировке запуск веб-приложения будет успешным.
Рисунки ниже поясняют как пересохранить файл app.py в кодировке UTF-8.
Простое приложение Flask №2
Для экспериментальной работы с приложением Flask, в прикрепленном исходнике проекта имеются два потенциальных файла запуска. Какой конкретно запускается в текущий момент указывается в свойствах проекта на вкладке Общее
Писать html-код в текстовой строке не очень удобно, поэтому во втором приложении облегчим себе работу по написанию html кода. Для этого будем использовать мощности текстового редактора интегрированной среды Visual Studio. Создадим три html файла, каждый из которых будет представлять отдельную страничку в браузере. Декораторы маршрутизации каркаса Flask минимальным кодом создают человеко-понятные URL адреса веб-страницам. Наполняя html файлы тегами с текстом легко создается примитивный сайт из трех страничек.
Содержимые html файлов выводятся в поток с помощью встроенной функции open(...)
. Отметьте, что открытие файла в текстовом режиме обязательно предусматривает установку кодировки текста. В случае открытия файла в бинарном режиме, кодировка текста определяется соответственно кодировке самого файла.
Программный код второго приложения Python Flask:
# ===== Запуск Flask веб-приложения с помощью сервера разработки =====
# Доступ к определению класса Flask
from flask import Flask
app = Flask(__name__)
# ====== Маршрутизация на основе декораторов =====
# URL = '/'
@app.route('/')
def home():
# Чтение файла в текстовом режиме только с указанием кодировки.
# return open('home.html', 'rt', encoding="utf-8")
# В бинарном режиме чтения можно не указывать кодировку текста.
# Возращает байты, кодировка не указывается.
# Кодировка текста распознается по кодировке файла.
# Так как кодировка файла UTF-8,
# то и байты будут восприняты как текст с символами UTF-8.
return open('home.html', 'rb')
# URL = 'page1'
@app.route('/page1')
def page1():
return open('page1.html', 'rt', encoding="utf-8")
# URL = 'page2'
@app.route('/page2')
def page2():
return open('page2.html', 'rt', encoding="utf-8")
# ====== /Маршрутизация на основе декораторов =====
if __name__ == '__main__':
import os
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5789'))
except ValueError:
PORT = 5789
app.run(HOST, PORT, True)
Исходник веб-приложения Flask
Архив исходника содержит все необходимые пакеты и виртуальную среду. Для возможности запуска приложения необходимо прописать путь к базовому интерпретатору Python версии от 3.9.7 до 3.10.7 установленный на ваш компьютер, на этих версиях исходник успешно протестирован.
Путь к базовому интерпретатору прописывается в файле виртуальной среды проекта envpyvenv.cfg как показано на рисунке выше. Открыть для просмотра файлы виртуальной среды можно кнопкой на вкладке Обозреватель проектов->Показать все файлы. Получение путей инсталляций интерпретаторов и библиотек Python описано в статье Программирование на Python в Visual Studio.
Скачать исходник
FlaskWebProjectEmpty-python39_8.zip
- Размер: 7934 Кбайт
- Загрузки: 23