Fórum Converter ´#32´ para 32 #293530
29/08/2005
0
Existe algum modo de em tempo de execução converter essa string para o caractere 32?
Falows!
Delphi32
Curtir tópico
+ 0Posts
29/08/2005
Massuda
Gostei + 0
29/08/2005
Delphi32
E também estou tendo problemas para fazer o inverso (converter 32 para ´32´ ou parecido). achei que ia conseguir, mas não estou.
até!
Gostei + 0
29/08/2005
Rjun
Funciona, da mesma forma que o Massuda explicou.
De onde você vai obter esse valor, 32?
Gostei + 0
29/08/2005
Massuda
var C: Char; S: string; ... S := ´´ + IntToStr(Ord(C)); ...
Gostei + 0
29/08/2005
Delphi32
[url]http://www.geocities.com/delphirj/caracter.jpg[/url]
No projeto tenho (como pode ser visto na foto) um tntEdit (Edit que suporta Unicode - [url]http://www.tntware.com/delphicontrols/unicode[/url]), um botão, um edit comum e outro tntEdit. No primeiro tenho um caractere japonês. Quando pressiono o primeiro botão ele retorna o código correto para aquele caractere, mas quando mando converter o código de volta para caracter fica errado. Como mostrado na figura, ele retorna o caractere ´B´. Para converter a letra no primeiro edit para inteiro e jogar no edit usei o seguinte código:
var c:WideChar; begin c := TntEdit1.Text[1]; Edit1.Text := IntToStr(Ord(C)); end;
Para converter o inteiro de volta estou usando o seguinte código:
begin tntEdit2.Text := Chr(StrToInt(Edit1.Text)); end;
Tentei fazer o seguinte:
var s:widechar; begin s := Chr(StrToInt(Edit1.Text)); tntEdit2.Text := s; end;
Mas também não funciona porque Chr retorna Char enquanto a variável é WideChar. Acho que o problema está justamente aí. tntEdit2.Text retorna uma WideString enquanto Chr está retornando Char...
Alguma idéia do que eu possa fazer? Thx pela ajuda!
Até!
Gostei + 0
29/08/2005
Martins
proc... TForm1.ButtonxClick(S... : T...); var C: Char; S: string; begin C:=´!´; S := ´´ + IntToStr(Ord(C)); ShowMessage(S); end;
ou assim
proc.... TForm1.ButtonxClick(S... : T...); var C: Char; S: string; begin C:=32; S := ´´ + IntToStr(Ord(C)); ShowMessage(S); end;
Gostei + 0
29/08/2005
Martins
Talvez esses códigos de ajudem, eles possam te dar uma luz.
{:Converts Unicode string to Ansi string using specified code page.
@param ws Unicode string.
@param codePage Code page to be used in conversion.
@returns Converted ansi string.
}
function WideStringToString(const ws: WideString; codePage: Word): AnsiString;
var
l: integer;
begin
if ws = ´ then
Result := ´
else
begin
l := WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], - 1, nil, 0, nil, nil);
SetLength(Result, l - 1);
if l > 1 then
WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], - 1, @Result[1], l - 1, nil, nil);
end;
end; { WideStringToString }
{:Converts Ansi string to Unicode string using specified code page.
@param s Ansi string.
@param codePage Code page to be used in conversion.
@returns Converted wide string.
}
function StringToWideString(const s: AnsiString; codePage: Word): WideString;
var
l: integer;
begin
if s = ´ then
Result := ´
else
begin
l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, nil, 0);
SetLength(Result, l - 1);
if l > 1 then
MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
- 1, PWideChar(@Result[1]), l - 1);
end;
end; { StringToWideString }
Espero q possa lhe ser útil.
Gostei + 0
29/08/2005
Delphi32
Troquei o código que estava usando:
tntEdit2.Text := Chr(StrToInt(Edit1.Text));
pelo mesmo usando a função do post anterior:
tntEdit2.Text := StringToWideString(Chr(StrToInt(Edit1.Text)),0);
mas mesmo assim o resultado ainda é o mesmo. continua retornando a letra ´B´ ao invés do caracter correto. Dois detalhes:
1) Eu posso afirmar que o código inteiro retornado é o código correto para o caractere porque quando vejo o dfm do form é exatamente esse valor que consta ao lado da propriedade Text do TntEdit, logo, certamente o erro acontece na hora de converter o inteiro de volta para caracter.
2) No código acima, quando passei a usar a função StringToWideString eu passei como parâmetro 0 (zero) para CodePage, mas eu testei vários outros valores, mas em todos os testes o resultado foi o mesmo. Retornou o caractere ´B´ ao invés do caractere correto.
Gostei + 0
29/08/2005
Massuda
begin tntEdit2.Text := WideChar(StrToInt(Edit1.Text)); end;
Gostei + 0
29/08/2005
Martins
begin tntEdit2.Text := WideChar(StrToInt(Edit1.Text)); end;
Funciona bem essa solução, blz [b:39c76df8d4]Massuda[/b:39c76df8d4]
Gostei + 0
30/08/2005
Delphi32
mas eu queria aproveitar esse tópico para tirar uma outra dúvida. Está ocorrendo um fato curioso:
na verdade o motivo disso tudo é pq eu tinha que gravar no meu banco de dados (FB 1.5) palavras em unicode. Criei o banco de dados com charset UNICODE_FSS. usei os componentes para banco de dados da Tnt (TntDBEdit) para tentar gravar os dados no banco. Na hora de escrever os caracteres no tntDBEdit tudo funciona corretamente, mas quando dou post o texto do edit passa a ser ´??????´. É como se o banco ainda estivesse rejeitando o UNICODE apesar do charset... Por causa disso ao invés de gravar a palavra estou gravando os códigos dos caracteres em um campo varchar (´143541435514675´) e em tenpo de execução converto e jogo em um tntEdit comum, mas eu queria saber se há um modo de inserir isso direto no banco de dados??? já procurei no google por firebird com unicode mas não encontrei nada... e os componentes da tnt não possuem um help ou coisa do tipo. nem no site...
alguém poderia me dar uma luz :?:
até!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)