Depois de estudar a codificação, aprendemos a relação entre a codificação GB2312 e o código de localização. Depois de tentar, recebemos este programa.
Pesquisar, ninguém parecia escrever, então eu publiquei aqui.
Primeiro lançamento original:
http://bbs.blueidea.com
http://mytju.com/classcode/
Reimpressão a qualquer momento, use -a a qualquer momento.
1. Breve descrição
(1) A definição do padrão GB2312 é na verdade o código de localização.
Existem 94 linhas no total, 94 colunas, linhas são códigos de área e colunas são números de bits.
Por exemplo, o código de área do caractere "AH" é 16 e o número de bits é 01, e seu código de posição é 1601.
(2) Cada caractere consiste no código de área + número de bits, representando dois bytes no total.
Cada byte é 01-94, que entra em conflito com o controlador de comunicação 0-31.
Portanto, adicione o código de área e o número de bits 32, respectivamente, para evitar conflitos.
(3) A partir do exposto, cada byte é 33-126, que entra em conflito com a codificação ASCII 0-127,
Portanto, coloque a posição mais alta em 1, ou seja, adicione 128 para evitar conflitos.
Então, no final, cada byte é 161-254.
2. Realize
O princípio é muito simples, adicione ou subtraia.
Vou postar a função que concluí aqui diretamente.
A cópia do código é a seguinte:
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FunctionChartoqwm (Byvaltr)
Dimshex, Shigh, Slow, Ilow, Ihigh, Sresult
Shex = Hex (ASC (STR)) 'Obtenha a codificação do código interno do caractere, como B0A1, essa codificação está na ordem correta e não há necessidade de trocar bits altos e baixos.
Shigh = esquerda (Shex, 2) 'recebe a parte alta codificada, como B0.
lento = à direita (Shex, 2) 'recebe a codificação baixa, como A1.
'GB2312 Interna Internation intervalo é & ha1a1-& hfefe, e cada byte está entre A1-FE.
ifnot (shigh> = "a1" e altura <= "fe") então
Chartoqwm = ""
Saída de saída
endif
ifnot (lento> = "a1" ellow <= "fe") então
Chartoqwm = ""
Saída de saída
endif
'O código de troca GB usa apenas 7 bits e a posição alta é 1, que é o código interno. Por sua vez, a posição alta é 0 e o código de troca pode ser obtido.
ilow = clng ("& h" e lento) -128
iHigh = clng ("& h" e shigh) -128
'O código de localização entra em conflito com o código de controle 0-31; portanto, após a adição de 32, o código do Exchange é o. Por sua vez, subtraia 32.
Ilow = Ilow-32
iHigh = iHigh-32
Ok, o código de localização foi obtido.
Sresult = ""
IfiHigh <10then
sresult = sresult & "0" & cstr (iHigh)
outro