A [:ascii:]
classe funciona no Postgres? Ele não está listado em sua ajuda , no entanto, vejo exemplos na web que o utilizam.
Eu tenho um banco de dados UTF-8, onde collation e c_typ e estão en_US.UTF-8
, e a versão do Postgres é 9.6.2. Quando procuro linhas não ASCII como esta:
select title from wallabag_entry where title ~ '[^[:ascii:]]';
Recebo ambos símbolos Unicode e não-Unicode (saída total é aqui ):
Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740-е чуть не отменил историю России
Have you heard of Saint Death? Don’t pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
China’s marriage rate is plummeting because women are choosing autonomy over
O que há de errado com esta consulta?
postgresql
utf-8
regular-expression
unicode
regex
Suncatcher
fonte
fonte
regexp_replace()
para marcar seus caracteres não ASCII. Veja minha resposta.[:ascii:]
classe de qualquer maneira. O que realmente me ajudou nesse problema é um conceito de blocos unicode, que aprendi com esse fabuloso regex tutorial .Respostas:
Para responder à sua pergunta:
[:ascii:]
funciona. Você pode ter alguns caracteres em seu texto que não reconhece como não ASCII , mas eles estão lá. Eles podem ser algo como um espaço inquebrável , por exemplo, ou qualquer outro caractere de espaço Unicode .Não é estranho ter espaços inquebráveis (
) nos textos que você copia e cola de uma página da web, mas não percebe que eles estão lá.Aqui está um exemplo para mostrar:
É isso que você recebe:
Você pode ver a partir disso, que seu problema é o personagem do apóstrofo certo . O ASCII suporta apenas o apóstrofo. Apóstrofo esquerdo e apóstrofo direito são extensões Unicode tipograficamente corretas.
dbfiddle aqui
Você também pode verificá-lo com versões anteriores em http://rextester.com/UKIQ48014 (PostgreSQL 9.5) e http://sqlfiddle.com/#!15/4c563/1/0 (PostgreSQL 9.3)
Os textos que acho que são puramente ASCII e não são :
dbfiddle aqui
Esses textos estão usando 'em vez de ' para marcar apóstrofos.
Verificar pontuação: Por que a aspas simples correta (U + 2019) e não o apóstrofo semanticamente distinto (U + 0027), o caractere de apóstrofo preferido no Unicode? ... para ver que você não é a primeira pessoa a encontrar esse problema.
fonte