Apakah [:ascii:]
kelas berfungsi di Postgres? Itu tidak tercantum dalam bantuan mereka , namun saya melihat contoh di web yang menggunakannya.
Saya memiliki database UTF-8, di mana collation dan c_typ e berada en_US.UTF-8
, dan versi Postgres adalah 9.6.2. Ketika saya mencari baris non-ASCII seperti ini:
select title from wallabag_entry where title ~ '[^[:ascii:]]';
Saya mendapatkan kedua Unicode dan non-Unicode simbol (output penuh adalah di sini ):
Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740-е чуть не отменил историю России
Have you heard of Saint Death? Don’t pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
China’s marriage rate is plummeting because women are choosing autonomy over
Apa yang salah dengan permintaan ini?
postgresql
utf-8
regular-expression
unicode
regex
Suncatcher
sumber
sumber
regexp_replace()
untuk menandai karakter non-ASCII Anda. Lihat jawaban saya.[:ascii:]
kelas. Apa yang benar-benar membantu saya dalam masalah ini adalah konsep blok unicode, yang saya pelajari dari regex hebat ini tutorial .Jawaban:
Untuk menjawab pertanyaan Anda:
[:ascii:]
berfungsi. Anda mungkin memiliki beberapa karakter dalam teks yang tidak Anda kenal sebagai non-ASCII , namun mereka ada di sana. Mereka dapat berupa ruang yang tidak dapat dipecahkan , misalnya, atau karakter ruang Unicode lainnya .Tidak aneh untuk memiliki spasi yang tidak dapat dipecahkan (
) dalam teks yang Anda salin dan tempel dari halaman web, namun Anda tidak melihat mereka ada di sana.Ini adalah contoh untuk ditampilkan:
Itu Apa yang Anda Dapatkan:
Anda dapat melihat dari sini, bahwa masalah Anda adalah karakter apostrof yang tepat . ASCII hanya mendukung tanda kutip. Apostrof kiri dan apostrof kanan adalah ekstensi Unicode yang benar secara tipografis.
Aku di sini
Anda dapat memeriksanya juga dengan versi sebelumnya di http://rextester.com/UKIQ48014 (PostgreSQL 9.5) dan http://sqlfiddle.com/#!15/4c563/1/0 (PostgreSQL 9.3)
Teks-teks yang saya kira menurut Anda adalah ASCII murni, dan bukan :
Aku di sini
Teks-teks ini menggunakan ' bukan ' untuk menandai apostrof.
Periksa Tanda Baca: Mengapa kutipan tunggal yang tepat (U + 2019), dan bukan tanda kutip yang berbeda secara semantik (U + 0027), karakter tanda kutip yang disukai dalam Unicode? ... untuk memastikan bahwa Anda bukan orang pertama yang menghadapi masalah ini.
sumber