Ir para conteúdo

[lua] unicode2latin1(str)


dalvorsn

Posts Recomendados

unicode2latin1(str)

 

    A função recebe como parametro uma string 'str', e procura nela ocorrencias de unicode/utf8 dos principais acentos usados e converte para latin1/iso-8859-1.
Não é feita a conversão de todos os caracteres possíveis, pois não é bem o intuito da função, mas caso queira adicionar basta incluir no map de caracteres. Os demais caracteres estão disponiveis nesta tabela.

function unicode2latin1(str) 	local map = {		-- ÁáÀàÂâÃã		{utf = {0xc3, 0x81}, latin =  0xc1}, -- Á		{utf = {0xc3, 0xa1}, latin =  0xe1}, -- á		{utf = {0xc3, 0x80}, latin =  0xc0}, -- À		{utf = {0xc3, 0xa0}, latin =  0xe0}, -- à		{utf = {0xc3, 0x82}, latin =  0xc2}, -- Â		{utf = {0xc3, 0xa2}, latin =  0xe2}, -- â		{utf = {0xc3, 0x83}, latin =  0xc3}, -- Ã		{utf = {0xc3, 0xa3}, latin =  0xe3}, -- ã		-- ÉéÈèÊê		{utf = {0xc3, 0x89}, latin =  0xc9}, -- É		{utf = {0xc3, 0xa9}, latin =  0xe9}, -- é		{utf = {0xc3, 0x88}, latin =  0xc8}, -- È		{utf = {0xc3, 0xa8}, latin =  0xe8}, -- è		{utf = {0xc3, 0x8a}, latin =  0xca}, -- Ê		{utf = {0xc3, 0xaa}, latin =  0xea}, -- ê		-- ÍíÌìÎî		{utf = {0xc3, 0x8d}, latin =  0xcc}, -- Í		{utf = {0xc3, 0xad}, latin =  0xec}, -- í		{utf = {0xc3, 0x8c}, latin =  0xcd}, -- Ì		{utf = {0xc3, 0xac}, latin =  0xed}, -- ì		{utf = {0xc3, 0x8e}, latin =  0xce}, -- Î		{utf = {0xc3, 0xae}, latin =  0xee}, -- î		-- ÓóÒòÔôÕõ		{utf = {0xc3, 0x93}, latin =  0xd3}, -- Ó		{utf = {0xc3, 0xb3}, latin =  0xf3}, -- ó		{utf = {0xc3, 0x92}, latin =  0xd2}, -- Ò		{utf = {0xc3, 0xb2}, latin =  0xf2}, -- ò		{utf = {0xc3, 0x94}, latin =  0xd4}, -- Ô		{utf = {0xc3, 0xb4}, latin =  0xf4}, -- ô		{utf = {0xc3, 0x95}, latin =  0xd5}, -- Õ		{utf = {0xc3, 0xb5}, latin =  0xf5}, -- õ		-- ÚúÙùÛû		{utf = {0xc3, 0x9a}, latin =  0xda}, -- Ú		{utf = {0xc3, 0xba}, latin =  0xfa}, -- ú		{utf = {0xc3, 0x99}, latin =  0xd9}, -- Ù		{utf = {0xc3, 0xb9}, latin =  0xf9}, -- ù		{utf = {0xc3, 0x9b}, latin =  0xdb}, -- Û		{utf = {0xc3, 0xbb}, latin =  0xfb}, -- û		-- Çç		{utf = {0xc3, 0x87}, latin =  0xc7}, -- Ç		{utf = {0xc3, 0xa7}, latin =  0xe7}  -- ç	}	if type(str) == "string" then		for i = 1, #map do 			str = str:gsub(string.char(unpack(map[i].utf)),  string.char(map[i].latin))		end	end	return strend

 

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, dalvorsn disse:

unicode2latin1(str)

 

    A função recebe como parametro uma string 'str', e procura nela ocorrencias de unicode/utf8 dos principais acentos usados e converte para latin1/iso-8859-1.

Não é feita a conversão de todos os caracteres possíveis, pois não é bem o intuito da função, mas caso queira adicionar basta incluir no map de caracteres. Os demais caracteres estão disponiveis nesta tabela.

function unicode2latin1(str) 	local map = {		-- ÁáÀàÂâÃã		{utf = {0xc3, 0x81}, latin =  0xc1}, -- Á		{utf = {0xc3, 0xa1}, latin =  0xe1}, -- á		{utf = {0xc3, 0x80}, latin =  0xc0}, -- À		{utf = {0xc3, 0xa0}, latin =  0xe0}, -- à		{utf = {0xc3, 0x82}, latin =  0xc2}, -- Â		{utf = {0xc3, 0xa2}, latin =  0xe2}, -- â		{utf = {0xc3, 0x83}, latin =  0xc3}, -- Ã		{utf = {0xc3, 0xa3}, latin =  0xe3}, -- ã		-- ÉéÈèÊê		{utf = {0xc3, 0x89}, latin =  0xc9}, -- É		{utf = {0xc3, 0xa9}, latin =  0xe9}, -- é		{utf = {0xc3, 0x88}, latin =  0xc8}, -- È		{utf = {0xc3, 0xa8}, latin =  0xe8}, -- è		{utf = {0xc3, 0x8a}, latin =  0xca}, -- Ê		{utf = {0xc3, 0xaa}, latin =  0xea}, -- ê		-- ÍíÌìÎî		{utf = {0xc3, 0x8d}, latin =  0xcc}, -- Í		{utf = {0xc3, 0xad}, latin =  0xec}, -- í		{utf = {0xc3, 0x8c}, latin =  0xcd}, -- Ì		{utf = {0xc3, 0xac}, latin =  0xed}, -- ì		{utf = {0xc3, 0x8e}, latin =  0xce}, -- Î		{utf = {0xc3, 0xae}, latin =  0xee}, -- î		-- ÓóÒòÔôÕõ		{utf = {0xc3, 0x93}, latin =  0xd3}, -- Ó		{utf = {0xc3, 0xb3}, latin =  0xf3}, -- ó		{utf = {0xc3, 0x92}, latin =  0xd2}, -- Ò		{utf = {0xc3, 0xb2}, latin =  0xf2}, -- ò		{utf = {0xc3, 0x94}, latin =  0xd4}, -- Ô		{utf = {0xc3, 0xb4}, latin =  0xf4}, -- ô		{utf = {0xc3, 0x95}, latin =  0xd5}, -- Õ		{utf = {0xc3, 0xb5}, latin =  0xf5}, -- õ		-- ÚúÙùÛû		{utf = {0xc3, 0x9a}, latin =  0xda}, -- Ú		{utf = {0xc3, 0xba}, latin =  0xfa}, -- ú		{utf = {0xc3, 0x99}, latin =  0xd9}, -- Ù		{utf = {0xc3, 0xb9}, latin =  0xf9}, -- ù		{utf = {0xc3, 0x9b}, latin =  0xdb}, -- Û		{utf = {0xc3, 0xbb}, latin =  0xfb}, -- û		-- Çç		{utf = {0xc3, 0x87}, latin =  0xc7}, -- Ç		{utf = {0xc3, 0xa7}, latin =  0xe7}  -- ç	}	if type(str) == "string" then		for i = 1, #map do 			str = str:gsub(string.char(unpack(map[i].utf)),  string.char(map[i].latin))		end	end	return strend

 

Pra que serve ?

Link para o comentário
Compartilhar em outros sites

Bom, ai vai variar de como usa, mas por exemplo se quiser que os npcs se comuniquem com acentuação brasileira, com essa função fica facil, porque tu converte o texto pra um formato que o cliente consegue interpretar e acentuar corretamente, e para não ficar algo pesado eu deixei mais voltado pros acentos mesmo. Se voce tiver um pouco mais de conhecimento da pra alterar o look de sigs, items e etc. Enfim, o modo que vai usar é contigo, mas a função é codificar os acentos.

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Lordfire disse:

Ué, mas Unicode tem suporte a todos os caracteres ._. o client usa latin1?

Não cheguei a testar no cliente do tibia, mas no otclient pelo menos ele usa o cp1252, sempre configura pro locale do pc que ta rodando.

Link para o comentário
Compartilhar em outros sites

16 horas atrás, dalvorsn disse:

Não cheguei a testar no cliente do tibia, mas no otclient pelo menos ele usa o cp1252, sempre configura pro locale do pc que ta rodando.

Ah, assumo que vc programa no Windows então, o que é um problema ahuauhauhauha

Link para o comentário
Compartilhar em outros sites

6 minutos atrás, Lordfire disse:

Ah, assumo que vc programa no Windows então, o que é um problema ahuauhauhauha

Buga os acentos nos dois

Na real eu programo a maioria do tempo no linux, só quando preciso mesmo que eu vou pro windows(sofrido isso)

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...