Sep 05 2009

Wykrywanie schametów kodowania znaków

Category: RubySebastian Bobrowski @ 2:22 pm

Jednoznaczne określenie schematu kodowania danego łańcucha znaków jest dość trudne. Schematy wielobajtowe wykazują pewne wzorce, które możemy wykrywać i na ich podstawie domniemywać o schemacie kodowania. Pozostają schematy kodowania jednobajtowe które są znacznie trudniejsze. Możemy próbować podejść od strony statystycznej ale przy krótkim łańcuchu nie daje to dobrych efektów.W większość sytuacji pierwszym krokiem przy rozpoznawaniu jest odpowiedź na pytanie: “Czy jest to uft8?”. Jeśli tak to jesteśmy w domu, jeśli nie sprawa staje się bardziej skomplikowana. Najprostszą metodą rozpoznania jest uzycie metody unpack, która rzuca wyjątek w sytuacji kiedy nie otrzymuje prawidłowego łańcucha na wejściu.

class String

def utf8?

unpack(’U*’)  rescue return false

end

end

W prosty sposób można też sprawdzać czy łańcuch składa się tylko ze znaków ASCII

class String

def ascii?

self.split(/./).all? {|ch| ch<128}

end

end

Leave a Reply