Sep 05 2009
Wykrywanie schametów kodowania znaków
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

