Postgres से गैर-ASCII पंक्तियों को छोड़कर


14

क्या [:ascii:]Postgres में क्लास काम करता है ? यह उनकी मदद में सूचीबद्ध नहीं है , हालांकि मैं वेब में उदाहरण देखता हूं जो इसका उपयोग करते हैं।

मेरे पास UTF-8 डेटाबेस है, जहां collation और c_typ e हैं en_US.UTF-8, और Postgres संस्करण 9.6.2 है। जब मैं इस तरह गैर- ASCII पंक्तियों की खोज करता हूं:

select title from wallabag_entry where title ~ '[^[:ascii:]]';

मुझे यूनिकोड और गैर-यूनिकोड दोनों प्रतीक मिलते हैं (पूर्ण आउटपुट यहाँ है ):

Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740 чуть не отменил историю России
Have you heard of Saint Death? Dont pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
Chinas marriage rate is plummeting because women are choosing autonomy over 

इस प्रश्न में क्या गलत है?


1
क्या यह संभव है कि आप यूनिकोड के नॉन-ब्रेकेबल स्पेस के साथ वाक्य प्राप्त कर रहे हों? (या कोई अन्य चरित्र जो सादे दृश्य में, उस बात के लिए छिपा होता है)
जोआनोलो

@joanolo, यह कैसे जांचें? कैसे नहीं देखा-सादा दृश्य?
सनकैचर

आप regexp_replace()अपने गैर-एएससीआईआई चिह्नों को चिह्नित करने के लिए ए का उपयोग कर सकते हैं । मेरा जवाब देखिए।
जोनलो

1
आपको हमेशा dba.se में सटीक परिणाम पेस्ट करना चाहिए। हम गैर-अस्सी के पात्रों के लिए ग्राफिक का परीक्षण नहीं कर सकते। हम वास्तविक परिणाम सेट का परीक्षण कर सकते हैं। यह एक ग्राफिक के
इवान कैरोल

2
बस अपने दो सेंट जोड़ने के लिए: जबकि जोनोलो का जवाब शानदार है, इसने मुझे इस ठोस समस्या को हल करने में मदद नहीं की। सही उद्धरणों को छोड़कर मेरे डेटासेट में अन्य भ्रामक पात्रों (एक जैसे स्थान, ",«) का एक समूह होता है, जो [:ascii:]किसी भी तरह वर्ग का उपयोग करना असंभव बनाता है । वास्तव में इस समस्या में मेरी मदद करने के लिए यूनिकोड ब्लॉक की अवधारणा है, जो मैंने इस शानदार रीज से सीखी। ट्यूटोरियल
सनकैचर

जवाबों:


25

अपने प्रश्न का उत्तर देने के लिए: [:ascii:]काम करता है। आप कर सकते हैं अपने पाठ है कि आप के रूप में पहचान नहीं पा रहे में कुछ अक्षर है गैर- ASCII , फिर भी वे वहीं हैं। वे एक गैर-तोड़ने योग्य स्थान की तरह कुछ हो सकते हैं , उदाहरण के लिए, या किसी अन्य यूनिकोड अंतरिक्ष चरित्र

ग्रंथों में गैर-विराम योग्य रिक्त स्थान (  ) होना कोई अजीब बात नहीं है, जिसे आप किसी वेब पेज से कॉपी-एंड-पेस्ट करते हैं, फिर भी आप वहां नोटिस नहीं करते हैं।

यहाँ एक उदाहरण दिखाया गया है:

WITH t(t) AS
(
    VALUES 
      ( 'Сталинская правозащитница: мать Меленкова бабушка Настя' ),
      ( 'Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?' ),
      ( 'Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев' ),
      ( 'Как комиссар Крекшин в 1740-е чуть не отменил историю России' ),
      ( 'Have you heard of Saint Death? Don’t pray to her.' ),
      ( 'Архаїчна українська мова: перевага чи недолік?' ),
      ( 'Гренада не их' ),
      ( 'China’s marriage rate is plummeting because women are choosing autonomy over ' )

)
SELECT 
    t,  regexp_replace(t, '([^[:ascii:]])', '[\1]', 'g') AS t_marked
FROM 
    t 
WHERE 
    t ~ '[^[:ascii:]]' ;

यही मिलता है:

                                       t                                       |                                                                                                 t_marked                                                                                                  
-------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Сталинская правозащитница: мать Меленкова бабушка Настя                       | [С][т][а][л][и][н][с][к][а][я] [п][р][а][в][о][з][а][щ][и][т][н][и][ц][а]: [м][а][т][ь] [М][е][л][е][н][к][о][в][а] [б][а][б][у][ш][к][а] [Н][а][с][т][я]
 Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?               | [Д][н][е][в][н][и][к] [Н][К][В][Д][и][с][т][а] [Ш][а][б][а][л][и][н][а]: [З][н][а][е][т] [л][и] [М][о][с][к][в][а] [п][о][л][о][ж][е][н][и][е] [н][а] [ф][р][о][н][т][е]?
 Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев   | [Б][е][г] [п][о] [г][о][р][о][д][у] [и] [п][о][е][з][д][к][а] [н][а] [о][с][л][е]: [к][а][к] [в] [с][р][е][д][н][е][в][е][к][о][в][ь][е] [н][а][к][а][з][ы][в][а][л][и] [п][р][е][л][ю][б][о][д][е][е][в]
 Как комиссар Крекшин в 1740 чуть не отменил историю России                  | [К][а][к] [к][о][м][и][с][с][а][р] [К][р][е][к][ш][и][н] [в] 1740-[е] [ч][у][т][ь] [н][е] [о][т][м][е][н][и][л] [и][с][т][о][р][и][ю] [Р][о][с][с][и][и]
 Have you heard of Saint Death? Dont pray to her.                             | Have you heard of Saint Death? Don[’]t pray to her.
 Архаїчна українська мова: перевага чи недолік?                                | [А][р][х][а][ї][ч][н][а] [у][к][р][а][ї][н][с][ь][к][а] [м][о][в][а]: [п][е][р][е][в][а][г][а] [ч][и] [н][е][д][о][л][і][к]?
 Гренада не их                                                                 | [Г][р][е][н][а][д][а] [н][е] [и][х]
 Chinas marriage rate is plummeting because women are choosing autonomy over  | China[’]s marriage rate is plummeting because women are choosing autonomy over 

आप इससे देख सकते हैं, कि आपकी समस्या सही-सही चरित्र है । ASCII केवल एपोस्ट्रोफ का समर्थन करता है। बायां-एपोस्ट्रोफ और दायां-एपोस्ट्रोफी टाइपोग्राफिक रूप से यूनिकोड एक्सटेंशन सही हैं।

यहाँ dbfiddle

आप इसे http://rextester.com/UKIQ48014 (PostgreSQL 9.5) और http://sqlfiddle.com/# -15 / 4c563 /1/0 (PostgreSQL 9.3) पर पिछले संस्करणों के साथ भी देख सकते हैं


मुझे लगता है कि ग्रंथ आपको लगता है कि शुद्ध ASCII हैं, और नहीं हैं :

 WITH t(t) AS
 (
     VALUES 
       ('A fully ASCII text!'),
       ('Have you heard of Saint Death? Don’t pray to her.'),
       ('China’s marriage rate is plummeting because women are choosing autonomy over ')
 )
 SELECT 
    regexp_replace(t, '([^[:ascii:]])', '[\1]', 'g') AS t_marked
 FROM 
    t 
 WHERE 
    t ~ '[^[:ascii:]]' ;
| t_marked |
 | : ------------------------------------------------- ----------------------------- |
 | क्या आपने संत मृत्यु के बारे में सुना है? डॉन ['] उससे प्रार्थना मत करो। |
 | चीन [] शादी की दर बहुत कम है क्योंकि महिलाएं स्वायत्तता का चयन कर रही हैं |
 

यहाँ dbfiddle

इन ग्रंथों का उपयोग कर रहे ' के बजाय ' निशान अक्षर लोप करने के लिए।

विराम चिह्न जांचें : सही एकल उद्धरण (U + 2019) क्यों है, और यूनिकोड में पसंदीदा अपोस्ट्रोफ वर्ण का शब्दार्थिक रूप से विशिष्ट अपोस्ट्रोफ (U + 0027) नहीं है? ... यह देखने के लिए कि आप इस समस्या का सामना करने वाले पहले व्यक्ति नहीं हैं।


3
यह एक बहुत ही शानदार जवाब है क्योंकि यह आपको गैर-अस्सी के पात्रों को दिखाता है। इस तरह से मैंने इस सवाल का जवाब दिया होगा।
इवान कैरोल

1
मैंने ओपी उदाहरण के साथ अपडेट किया।
इवान कैरोल

1
वास्तव में शानदार और उपयोगी उत्तर! धन्यवाद।
सनकैचर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.