Open dmitrybalsy opened 2 years ago
@89z that was the case until a few days ago, then I started to get this error
youtube-dl -v -vg "https://vk.com/video-133441491_456261066"
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v', '-vg', 'https://vk.com/video-133441491_456261066']
[debug] Encodings: locale UTF-8, fs utf-8, out utf-8, pref UTF-8
[debug] youtube-dl version 2021.12.17
[debug] Python version 3.8.10 (CPython) - Linux-5.13.0-1023-aws-x86_64-with-glibc2.29
[debug] exe versions: ffmpeg 4.2.7, ffprobe 4.2.7
[debug] Proxy map: {}
-----------------------
None
None
ERROR: This video is only available for registered users. Use --username and --password or --netrc to provide account credentials.
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper
return func(self, *args, **kwargs)
File "/usr/local/lib/python3.8/dist-packages/youtube_dl/YoutubeDL.py", line 836, in __extract_info
ie_result = ie.extract(url)
File "/usr/local/lib/python3.8/dist-packages/youtube_dl/extractor/common.py", line 534, in extract
ie_result = self._real_extract(url)
File "/usr/local/lib/python3.8/dist-packages/youtube_dl/extractor/vk.py", line 328, in _real_extract
payload = self._download_payload('al_video', video_id, data)
File "/usr/local/lib/python3.8/dist-packages/youtube_dl/extractor/vk.py", line 75, in _download_payload
self.raise_login_required()
File "/usr/local/lib/python3.8/dist-packages/youtube_dl/extractor/common.py", line 941, in raise_login_required
raise ExtractorError(
youtube_dl.utils.ExtractorError: This video is only available for registered users. Use --username and --password or --netrc to provide account credentials.
As I just wrote in the previous issue:
As a rule, the login function of any extractor is liable to break because sites change the procedure, by adding captchas or whatever. If the login function doesn't succeed, or even always, omit
-u ...
/--username ...
and use--cookies ...
.
If, as I understand it, you disabled the login function, that applies in Spades.
@dirkf If I did disabled the login function it would be unintentional and unlikely. Where do I check for that? This comes from within a tool I written. That code has not changed. It worked in the beginning of the week. I think vk updated their back end and by doing so it broke youtube-dl (vk portion of it). The problem with this theory (vk changed its backend) is that I could not find any recent activity in changelog.
The original problem was not even a login. It failed to pull public video with an error saying that the video is private.
youtube_dl.utils.ExtractorError: This video is only available for registered users. Use --username and --password or --netrc to provide account credentials.
I tried using my credentials and it failed with them too.
youtube_dl.utils.ExtractorError: Unable to login, incorrect username and/or password
I tried redownloading the video that I was able to download before. It produced the same error.
You wrote:
# I edit file /usr/local/lib/python3.8/dist-packages/youtube_dl/YoutubeDL.py with: # def _login(self): # username, password = self._get_login_info() # print("-----------------------") # print(username) # print(password)
If that means you commented out the YoutubeDL._login()
method, then anything could happen.
The extractor diagnostics are confusing because it doesn't suggest using the --cookies ...
option which is the most likely to succeed when --username ...
fails.
Anyhow there are further new site issues that will break VK extraction: see https://github.com/yt-dlp/yt-dlp/issues/4097.
oo no, sorry for the confusion I commented that out for the output showing this is what is happening in the background (and not a part of the stderr) and the credentials that are printed out I used to log in via UI.
Thank you for sharing the link.
snippet from the code and actually I pasted in a wrong file this is the file edited
/usr/local/lib/python3.8/dist-packages/youtube_dl/extractor/vk.py
Vk change login page. Cookies don't work.
They're using some really tight code to prevent downloads of their livestreams. It seems difficult for any app or program to generate even a downloadable link or alternative stream link, even the ones that guarantee it.
So not only me getting error about downloading vk video? I created _netrc, created config file, tried to use -u -p/--username --password but yet it getting me this error
No, it's a general issue with VK as other commenters have noted; see the link in https://github.com/ytdl-org/youtube-dl/issues/31035#issuecomment-1159733957.
From https://github.com/ytdl-org/youtube-dl/issues/31041#issue-1277401990:
The authentication algorithm on the site vk.com changed. Now on the start page in the input form you need to specify only the login, after clicking on the button in the next form you need to enter only the password. Please correct the authentication for vk.com in your module vk.py
Does anyone know another way to download videos from vk.com by python?
Vk change login page. Cookies don't work.
How not? (Remember to not use -u ...
/--username ...
)
For me, nor youtube-dl -u ... -p ... , youtube-dl -n or cookies works.
For me, nor youtube-dl -u ... -p ... , youtube-dl -n or cookies works.
Please tell us the details how you use cookies for downloading from vk.com? I tried to save cookies by the chrome extension (get cookies.txt), but I got an error:
youtube-dl -v --cookies vk.com_cookies.txt https://vk.com/video-31480508_456243099
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: [u'-v', u'--cookies', u'vk.com_cookies.txt', u'https://vk.com/video-31480508_456243099']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2021.06.06
[debug] Python version 2.7.18 (CPython) - Darwin-21.1.0-x86_64-i386-64bit
[debug] exe versions: ffmpeg 5.0.1, ffprobe 5.0.1, rtmpdump 2.4
[debug] Proxy map: {}
[vk] -31480508_456243099: Downloading JSON metadata
ERROR: Unable to download JSON metadata: HTTP Error 404: Not Found (caused by HTTPError()); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
What am I doing wrong?
What am I doing wrong?
You're doing everything right, the VK has changed something...
There are two issues:
Consequently:
--cookies ...
, but perhaps embedded and private are mutually exclusive.This patch fixes the extractor for public videos and should, I hope, enable private videos with --cookies ...
as well (it also includes _VALID_URL
improvements from yt-dlp).
--- old/youtube_dl/extractor/vk.py
+++ new/youtube_dl/extractor/vk.py
@@ -16,6 +16,7 @@
orderedSet,
str_or_none,
str_to_int,
+ try_get,
unescapeHTML,
unified_timestamp,
url_or_none,
@@ -64,10 +65,14 @@
def _download_payload(self, path, video_id, data, fatal=True):
data['al'] = 1
+ url = 'https://vk.com/%s.php' % path
code, payload = self._download_json(
- 'https://vk.com/%s.php' % path, video_id,
+ url, video_id,
data=urlencode_postdata(data), fatal=fatal,
- headers={'X-Requested-With': 'XMLHttpRequest'})['payload']
+ headers={
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'Referer': url,
+ })['payload']
if code == '3':
self.raise_login_required()
elif code == '8':
@@ -87,22 +92,22 @@
)
ext\.php\?(?P<embed_query>.*?\boid=(?P<oid>-?\d+).*?\bid=(?P<id>\d+).*)|
(?:
- (?:(?:m|new)\.)?vk\.com/(?:.+?\?.*?z=)?video|
+ (?:(?:m|new)\.)?vk\.com/(?:.+?\?.*?z=)?video|clip|
(?:www\.)?daxab.com/embed/
)
- (?P<videoid>-?\d+_\d+)(?:.*\blist=(?P<list_id>[\da-f]+))?
+ (?P<videoid>-?\d+_\d+)(?:.*\blist=(?P<list_id>[\da-f]+|ln-[\da-zA-Z]+))?
)
'''
_TESTS = [
{
'url': 'http://vk.com/videos-77521?z=video-77521_162222515%2Fclub77521',
- 'md5': '7babad3b85ea2e91948005b1b8b0cb84',
+ 'md5': '56df4e32658e1ffb77fdf2548327f73a',
'info_dict': {
'id': '-77521_162222515',
'ext': 'mp4',
'title': 'ProtivoGunz - Хуёвая песня',
'uploader': 're:(?:Noize MC|Alexander Ilyashenko).*',
- 'uploader_id': '-77521',
+ 'uploader_id': '39545378',
'duration': 195,
'timestamp': 1329049880,
'upload_date': '20120212',
@@ -124,7 +129,7 @@
{
'note': 'Embedded video',
'url': 'https://vk.com/video_ext.php?oid=-77521&id=162222515&hash=87b046504ccd8bfa',
- 'md5': '7babad3b85ea2e91948005b1b8b0cb84',
+ 'md5': '56df4e32658e1ffb77fdf2548327f73a',
'info_dict': {
'id': '-77521_162222515',
'ext': 'mp4',
@@ -133,7 +138,7 @@
'duration': 195,
'upload_date': '20120212',
'timestamp': 1329049880,
- 'uploader_id': '-77521',
+ 'uploader_id': '39545378',
},
},
{
@@ -180,6 +185,19 @@
'view_count': int,
},
'skip': 'Removed',
+ },
+ {
+ 'url': 'https://vk.com/video-93049196_456239755?list=ln-cBjJ7S4jYYx3ADnmDT',
+ 'info_dict': {
+ 'id': '-93049196_456239755',
+ 'ext': 'mp4',
+ 'title': '8 серия (озвучка)',
+ 'duration': 8383,
+ 'timestamp': 1640162189,
+ 'upload_date': '20211222',
+ 'uploader': 'Dizi2021',
+ 'uploader_id': '-93049196',
+ },
},
{
# video (removed?) only available with list id
@@ -227,6 +245,7 @@
'params': {
'skip_download': True,
},
+ 'skip': 'This video has been deleted',
},
{
# video key is extra_data not url\d+
@@ -254,8 +273,6 @@
'title': 'ИгроМир 2016 День 1 — Игромания Утром',
'uploader': 'Игромания',
'duration': 5239,
- # TODO: use act=show to extract view_count
- # 'view_count': int,
'upload_date': '20160929',
'uploader_id': '-387766',
'timestamp': 1475137527,
@@ -297,6 +314,10 @@
{
# The video is not available in your region.
'url': 'https://vk.com/video-51812607_171445436',
+ 'only_matching': True,
+ },
+ {
+ 'url': 'https://vk.com/clip30014565_456240946',
'only_matching': True,
}]
@@ -314,7 +335,7 @@
mv_data = {}
if video_id:
data = {
- 'act': 'show_inline',
+ 'act': 'show',
'video': video_id,
}
# Some videos (removed?) can only be downloaded with list id specified
@@ -323,8 +344,10 @@
data['list'] = list_id
payload = self._download_payload('al_video', video_id, data)
+ opts = try_get(payload, lambda x: x[-1], dict)
+ if not opts:
+ raise ExtractorError('Invalid payload data')
info_page = payload[1]
- opts = payload[-1]
mv_data = opts.get('mvData') or {}
player = opts.get('player') or {}
else:
def _download_payload(self, path, video_id, data, fatal=True):
It works! Thank you!
this is great @dirkf, I update the file with the changes but unfortunately I do to see the download happening I get this instead
youtube-dl -vg "https://vk.com/video-133441491_456261193"
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-vg', 'https://vk.com/video-133441491_456261193']
[debug] Encodings: locale UTF-8, fs utf-8, out utf-8, pref UTF-8
[debug] youtube-dl version 2021.12.17
[debug] Python version 3.8.10 (CPython) - Linux-5.13.0-1023-aws-x86_64-with-glibc2.29
[debug] exe versions: ffmpeg 4.2.7, ffprobe 4.2.7
[debug] Proxy map: {}
[debug] Default format spec: bestvideo+bestaudio/best
https://vkvd262.mycdn.me/expires/1656117961051/srcIp/54.242.237.254/pr/40/srcAg/CHROME/ms/45.136.20.183/type/3/sig/eQKgW9u4xMs/ct/8/urls/185.226.53.172/clientType/13/zs/43/id/2634730506936/video/
@dirkf I think it was my mistake with the command line. Once I ran my tool that uses it as a lib it worked
youtube_dl.YoutubeDL({"outtmpl": file_path}).download(
[self.video_files_contents[video]["source_link"]]
thank you for getting this resolved. I am assuming that at some point this will be a part of the rc build?
-g
/--get-url
just prints the download link(s).
There will be a PR. If someone manages to fix the login soon, I'll add that before merging. Then, real soon now, a 2022.0n.mm release.
я всё сделал по гайду обновил но. пишет опять тоже самое [vk] 77496727_456240355: Downloading JSON metadata ERROR: This video is only available for registered users. Use --username and --password or --netrc to provide account credentials.
вы можете просто файл загрузить куда-то целиком, а не кусками. может я не туда вставил что-то
я всё сделал по гайду обновил но. пишет опять тоже самое [G Translate] I did everything on the guide, I updated but. writes again the same [my Translate] I did everything according to the guide, I updated, but still get the same result ...
вы можете просто файл загрузить куда-то целиком, а не кусками. может я не туда вставил что-то [G Translate]You can just download the file somewhere, not in pieces. maybe I put something in the wrong place
Here I'm not sure what point the commenter is making.
Don't expect the released version to work at the moment without patching.
Even then, don't expect the login or netrc functions to work: use cookies instead.
Post your verbose log (use -v
/--verbose
option) if it's significantly different from that already posted.
Читайте https://github.com/ytdl-org/youtube-dl/issues/31035#issuecomment-1161719063`.
Не ожидайте, что выпущенная версия будет работать сейчас без исправления. Даже тогда не ожидайте, что функции входа в систему или NETRC будут работать: вместо этого используйте файлы cookie. Разместите свой журнал словеса (используйте опцию `-v`/`-verbose`), если он значительно отличается от того, что уже опубликовано.Спасибо, а есть какие-то гайды как использовать файлы cookie я не совсем понимаю как их подключить
def _download_payload(self, path, video_id, data, fatal=True):
It works! Thank you!
а что это? надо вставить куда-то?
I can't login , the username and password are correct
Спасибо, а есть какие-то гайды как использовать файлы cookie я не совсем понимаю как их подключить
Нужно узнать, какой у браузера User-Agent, и указать параметр --user-agent такой же. Потом если один раз запустить с параметром --cookie vk.txt, то пока yt-dl потыкается в сайт, он создаст vk.txt с кукисами в правильном формате. Открываем в браузере список куки, в Firefox при открытом залогиненном ВКонтакте Ctrl+Shift+K, вкладка Хранилище, раздел Куки, и по одной чик-чик-чик Ctrl+C, Ctrl+V имя и значение в vk.txt, через табуляцию, как требует формат файла. С таким содержимым vk.txt можно будет качать видео. У меня получилось скачать generic движком из мобильной (m.vk.com) версии сайта, но для этого ещё в эту мобильную версию зайти надо, у мобильной свои куки, и только потом снимать куки в vk.txt
youtube-dl --cookies vk.txt --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0" --force-generic-extractor https://m.vk.com/video-12345_67890
I had success with cookies method, generic extractor and a MOBILE (m.vk.com/video) version. You need to be sure saved cookies match the mobile version, so login to mobile version first in real browser
I can't login , the username and password are correct
https://github.com/ytdl-org/youtube-dl/issues/31035#issuecomment-1179766308 applies, as well as the comment above.
FWIW, the video URI posted in the opening post,
https://vk.com/video-133441491_456261066
can be "handled" by latest yt-dlp
, at least from my location (SE-Europe), without any cookies or credentials:
yt-dlp -F "https://vk.com/video-133441491_456261066"
[debug] Command-line config: ['--ffmpeg-location', '..', '--downloader-args', 'ffmpeg:-v 8 -stats', '-v', '-F', 'https://vk.com/video-133441491_456261066']
[debug] Encodings: locale cp1253, fs utf-8, pref cp1253, out utf-8 (No VT), error utf-8 (No VT), screen utf-8 (No VT)
[debug] ytdl-patched/yt-dlp version 2022.09.05.810 [47a60be] (win32_exe)
[debug] ** This build is unofficial daily builds, provided for ease of use.
[debug] ** Please do not ask for any support.
[debug] Python 3.7.9 (CPython 32bit) - Windows-Vista-6.0.6003-SP2
[debug] Checking exe version: "..\ffmpeg" -bsfs
[debug] Checking exe version: "..\ffprobe" -bsfs
[debug] exe versions: ffmpeg 4.4.1 (setts), ffprobe 4.4.1, phantomjs 2.1.1
[debug] Optional libraries: Cryptodome-3.15.0, brotli-1.0.9, certifi-2022.06.15, mutagen-1.45.1, sqlite3-2.6.0, websockets-10.3
[debug] Proxy map: {}
[debug] Loaded 1670 extractors
[debug] [vk] Extracting URL: https://vk.com/video-133441491_456261066
[vk] -133441491_456261066: Downloading JSON metadata
[vk] -133441491_456261066: Downloading m3u8 information
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7),vcodec:vp9.2(10), channels, acodec, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, source, id
[info] Available formats for -133441491_456261066:
ID EXT RESOLUTION FPS | FILESIZE TBR PROTO | VCODEC VBR ACODEC ABR
------------------------------------------------------------------------------------------
hls-193 mp4 256x144 25 | ~ 4.46MiB 194k m3u8 | unknown 194k unknown 0k
url240 unknown_video 240p | https | unknown unknown
hls-369 mp4 426x240 25 | ~ 8.52MiB 369k m3u8 | unknown 369k unknown 0k
url360 unknown_video 360p | https | unknown unknown
hls-725 mp4 640x360 25 | ~ 16.74MiB 725k m3u8 | unknown 725k unknown 0k
url480 unknown_video 480p | https | unknown unknown
hls-1185 mp4 852x480 25 | ~ 27.35MiB 1186k m3u8 | unknown 1186k unknown 0k
url720 unknown_video 720p | https | unknown unknown
hls-2460 mp4 1280x720 25 | ~ 56.77MiB 2461k m3u8 | unknown 2461k unknown 0k
url1080 unknown_video 1080p | https | unknown unknown
hls-5058 mp4 1920x1080 25 | ~116.70MiB 5058k m3u8 | unknown 5058k unknown 0k
So, again, some backporting might be needed 😉 ...
Be that as it may, I'm not sure whether yt-dlp
can handle "true" private VK videos...
doesn't work for me in Europe
yt-dlp -F "https://vk.com/video-133441491_456261066" [vk] -133441491_456261066: Downloading JSON metadata ERROR: This video is only available for registered users. Use --cookies, --username and --password or --netrc to provide account credentials
can be "handled" by latest
yt-dlp
, at least from my location (SE-Europe), without any cookies or credentials:yt-dlp -F "https://vk.com/video-133441491_456261066"
@gsw17 : Which version of yt-dlp
is that on?
Both the stable yt-dlp
release (2022.09.01) as well as latest "daily" build (which you can get from:
https://github.com/ytdl-patched/yt-dlp/tags )
work fine here with that sample VK URI:
yt-dlp -v -F "https://vk.com/video-133441491_456261066" --ie vk
[debug] Command-line config: ['--ffmpeg-location', '..', '--downloader-args', 'ffmpeg:-v 8 -stats', '-v', '-F', 'https://vk.com/video-133441491_456261066', '--ie', 'vk']
[debug] Encodings: locale cp1253, fs utf-8, pref cp1253, out utf-8 (No VT), error utf-8 (No VT), screen utf-8 (No VT)
[debug] yt-dlp version 2022.09.01 [5d7c7d6] (win32_exe)
[debug] Python 3.7.9 (CPython 32bit) - Windows-Vista-6.0.6003-SP2
[debug] Checking exe version: "..\ffmpeg" -bsfs
[debug] Checking exe version: "..\ffprobe" -bsfs
[debug] exe versions: ffmpeg 4.4.1 (setts), ffprobe 4.4.1, phantomjs 2.1.1
[debug] Optional libraries: Cryptodome-3.15.0, brotli-1.0.9, certifi-2022.06.15, mutagen-1.45.1, sqlite3-2.6.0, websockets-10.3
[debug] Proxy map: {}
[debug] Loaded 1 extractors
[debug] [vk] Extracting URL: https://vk.com/video-133441491_456261066
[vk] -133441491_456261066: Downloading JSON metadata
[vk] -133441491_456261066: Downloading m3u8 information
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7),vcodec:vp9.2(10), channels, acodec, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, source, id
[info] Available formats for -133441491_456261066:
ID EXT RESOLUTION FPS | FILESIZE TBR PROTO | VCODEC VBR ACODEC ABR
------------------------------------------------------------------------------------------
hls-193 mp4 256x144 25 | ~ 4.46MiB 194k m3u8 | unknown 194k unknown 0k
url240 unknown_video 240p | https | unknown unknown
hls-369 mp4 426x240 25 | ~ 8.52MiB 369k m3u8 | unknown 369k unknown 0k
url360 unknown_video 360p | https | unknown unknown
hls-725 mp4 640x360 25 | ~ 16.74MiB 725k m3u8 | unknown 725k unknown 0k
url480 unknown_video 480p | https | unknown unknown
hls-1185 mp4 852x480 25 | ~ 27.35MiB 1186k m3u8 | unknown 1186k unknown 0k
url720 unknown_video 720p | https | unknown unknown
hls-2460 mp4 1280x720 25 | ~ 56.77MiB 2461k m3u8 | unknown 2461k unknown 0k
url1080 unknown_video 1080p | https | unknown unknown
hls-5058 mp4 1920x1080 25 | ~116.70MiB 5058k m3u8 | unknown 5058k unknown 0k
Are you able to watch that video inside your browser?
If VK geo-blocks certain European regions, then the error issued by yt-dlp
should be more appropriate for such a case ...
Hi! I still have the same issue. Here's what have:
I've verified that I'm running yt-dlp version 2023.1.6 (update instructions) or later (specify commit) I've checked that all provided URLs are playable in a browser with the same IP and same login details I've searched the bugtracker for similar issues including closed ones. DO NOT post duplicates I've read the guidelines for opening an issue
I have an error "Access to this video has been restricted by its creator" on my video that I am the only one who can watch it and error "Access to this video has been restricted by the community's managers" which is available for donors.
Cookies are passed from browser and I tried pass them with a file exported via Get cookies.txt. But it's suspicious there is no an error like "Login failed" when cookies is not passed.
Here is my code:
import yt_dlp, pathlib
def download_video (URL):
path = pathlib.Path(r"C:\users\Иван\Documents\Python_programs\DownloadKV\vk.com.txt")
ydl_opts = { "cookies-from-browser": "chrome", "verbose": True, "ie": "vk" }
with yt_dlp.YoutubeDL (ydl_opts) as ydl:
ydl.download (URL)
download_video("https://vk.com/video/subscriptions?z=video-168725999_456240334%2Fpl_cat_subscribes")
[debug] Encodings: locale cp1251, fs utf-8, pref cp1251, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2023.01.06 [6becd2508] API
[debug] params: {'verbose': True, 'ie': 'vk', 'compat_opts': set()}
[debug] Lazy loading extractors is disabled
[debug] Python 3.11.1 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1q 5 Jul 2022)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.17, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4
[debug] Proxy map: {}
[debug] Loaded 1767 extractors
I’d appreciate your help!
Please discuss this in the yt-dlp tracker to avoid confusion.
Please discuss this in the yt-dlp tracker to avoid confusion.
Yep, my mistake
Back-port of the newly updated yt-dlp extractor handles https://vk.com/video-133441491_456261066.
Checklist
Question
WRITE QUESTION HERE I am trying to download a video with my vk login credential but it fails do to invalid credentials. I am able to log in to my account using the same credentials that are returned in the failed youtube-dl pull request
here is the command line
From what I found is that this should be working, and it is very likely that it is my credentials, but I was able to validate my credentials by login in with it to vk. Maybe my credentials need to wrapped in some chars like ' or " or some other char?