Модератор: Модераторы
unit CpConv;
interface
//uses ;
//const
type TCodePage = (cp1251,cp866,koi8r,koi8u);
TCodeTable = array [0..255] of char;
TUCodeTable = array [0..511] of char;
//TUCodeTable = WideString ;
const conv1251_to_866 : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$80#$81#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F +
#$90#$91#$92#$93#$94#$95#$96#$97#$98#$99#$9A#$9B#$9C#$9D#$9E#$9F +
#$FF#$F6#$F7#$A3#$FD#$A5#$A6#$A7#$F0#$A9#$F2#$AB#$AC#$AD#$AE#$F4 +
#$F8#$B1#$B2#$B3#$B4#$B5#$B6#$FA#$F1#$FC#$F3#$BB#$BC#$BD#$BE#$F5 +
#$80#$81#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F +
#$90#$91#$92#$93#$94#$95#$96#$97#$98#$99#$9A#$9B#$9C#$9D#$9E#$9F +
#$A0#$A1#$A2#$A3#$A4#$A5#$A6#$A7#$A8#$A9#$AA#$AB#$AC#$AD#$AE#$AF +
#$E0#$E1#$E2#$E3#$E4#$E5#$E6#$E7#$E8#$E9#$EA#$EB#$EC#$ED#$EE#$EF ;
conv1251_to_koi8r : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$80#$81#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F +
#$90#$91#$92#$93#$94#$95#$96#$97#$98#$99#$9A#$9B#$9C#$9D#$9E#$9F +
#$9A#$A1#$A2#$A3#$A4#$A5#$A6#$A7#$B3#$BF#$AA#$AB#$AC#$AD#$AE#$AF +
#$9C#$B1#$B2#$B3#$B4#$B5#$B6#$9E#$A3#$B9#$BA#$BB#$BC#$BD#$BE#$BF +
#$E1#$E2#$F7#$E7#$E4#$E5#$F6#$FA#$E9#$EA#$EB#$EC#$ED#$EE#$EF#$F0 +
#$F2#$F3#$F4#$F5#$E6#$E8#$E3#$FE#$FB#$FD#$FF#$F9#$F8#$FC#$E0#$F1 +
#$C1#$C2#$D7#$C7#$C4#$C5#$D6#$DA#$C9#$CA#$CB#$CC#$CD#$CE#$CF#$D0 +
#$D2#$D3#$D4#$D5#$C6#$C8#$C3#$DE#$DB#$DD#$DF#$D9#$D8#$DC#$C0#$D1 ;
conv1251_to_koi8u : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$80#$B4#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F +
#$90#$91#$92#$93#$94#$95#$96#$97#$98#$99#$9A#$9B#$9C#$9D#$9E#$9F +
#$9A#$A1#$A2#$A3#$A4#$BD#$A6#$A7#$B3#$BF#$B4#$AB#$AC#$AD#$AE#$B7 +
#$9C#$B1#$B6#$A6#$AD#$B5#$B6#$9E#$A3#$B9#$A4#$BB#$BC#$BD#$BE#$A7 +
#$E1#$E2#$F7#$E7#$E4#$E5#$F6#$FA#$E9#$EA#$EB#$EC#$ED#$EE#$EF#$F0 +
#$F2#$F3#$F4#$F5#$E6#$E8#$E3#$FE#$FB#$FD#$FF#$F9#$F8#$FC#$E0#$F1 +
#$C1#$C2#$D7#$C7#$C4#$C5#$D6#$DA#$C9#$CA#$CB#$CC#$CD#$CE#$CF#$D0 +
#$D2#$D3#$D4#$D5#$C6#$C8#$C3#$DE#$DB#$DD#$DF#$D9#$D8#$DC#$C0#$D1 ;
conv866_to_1251 : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$C0#$C1#$C2#$C3#$C4#$C5#$C6#$C7#$C8#$C9#$CA#$CB#$CC#$CD#$CE#$CF +
#$D0#$D1#$D2#$D3#$D4#$D5#$D6#$D7#$D8#$D9#$DA#$DB#$DC#$DD#$DE#$DF +
#$E0#$E1#$E2#$E3#$E4#$E5#$E6#$E7#$E8#$E9#$EA#$EB#$EC#$ED#$EE#$EF +
#$B0#$B1#$B2#$B3#$B4#$B5#$B6#$B7#$B8#$B9#$BA#$BB#$BC#$BD#$BE#$BF +
#$C0#$C1#$C2#$C3#$C4#$C5#$C6#$C7#$C8#$C9#$CA#$CB#$CC#$CD#$CE#$CF +
#$D0#$D1#$D2#$D3#$D4#$D5#$D6#$D7#$D8#$D9#$DA#$DB#$DC#$DD#$DE#$DF +
#$F0#$F1#$F2#$F3#$F4#$F5#$F6#$F7#$F8#$F9#$FA#$FB#$FC#$FD#$FE#$FF +
#$A8#$B8#$AA#$BA#$AF#$BF#$A1#$A2#$B0#$F9#$B7#$FB#$B9#$A4#$FE#$A0 ;
conv866_to_koi8r : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$E1#$E2#$F7#$E7#$E4#$E5#$F6#$FA#$E9#$EA#$EB#$EC#$ED#$EE#$EF#$F0 +
#$F2#$F3#$F4#$F5#$E6#$E8#$E3#$FE#$FB#$FD#$FF#$F9#$F8#$FC#$E0#$F1 +
#$C1#$C2#$D7#$C7#$C4#$C5#$D6#$DA#$C9#$CA#$CB#$CC#$CD#$CE#$CF#$D0 +
#$90#$91#$92#$81#$87#$B2#$B4#$A7#$A6#$B5#$A1#$A8#$AE#$AD#$AC#$83 +
#$84#$89#$88#$86#$80#$8A#$AF#$B0#$AB#$A5#$BB#$B8#$B1#$A0#$BE#$B9 +
#$BA#$B6#$B7#$AA#$A9#$A2#$A4#$BD#$BC#$85#$82#$8D#$8C#$8E#$8F#$8B +
#$D2#$D3#$D4#$D5#$C6#$C8#$C3#$DE#$DB#$DD#$DF#$D9#$D8#$DC#$C0#$D1 +
#$B3#$A3#$F2#$F3#$F4#$F5#$F6#$F7#$9C#$95#$9E#$96#$FC#$FD#$94#$9A ;
conv866_to_koi8u : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$E1#$E2#$F7#$E7#$E4#$E5#$F6#$FA#$E9#$EA#$EB#$EC#$ED#$EE#$EF#$F0 +
#$F2#$F3#$F4#$F5#$E6#$E8#$E3#$FE#$FB#$FD#$FF#$F9#$F8#$FC#$E0#$F1 +
#$C1#$C2#$D7#$C7#$C4#$C5#$D6#$DA#$C9#$CA#$CB#$CC#$CD#$CE#$CF#$D0 +
#$90#$91#$92#$81#$87#$B2#$B6#$B7#$B8#$B5#$A1#$A8#$AE#$BD#$AC#$83 +
#$84#$89#$88#$86#$80#$8A#$AF#$B0#$AB#$A5#$BB#$B8#$B1#$A0#$BE#$B9 +
#$BA#$D1#$D2#$AA#$A9#$A2#$D6#$D7#$BC#$85#$82#$8D#$8C#$8E#$8F#$8B +
#$D2#$D3#$D4#$D5#$C6#$C8#$C3#$DE#$DB#$DD#$DF#$D9#$D8#$DC#$C0#$D1 +
#$B3#$A3#$F2#$A4#$B7#$A7#$F6#$F7#$9C#$95#$9E#$96#$FC#$FD#$94#$9A ;
convkoi8r_to_1251 : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$80#$81#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F +
#$90#$91#$92#$93#$94#$95#$96#$97#$98#$99#$A0#$9B#$B0#$9D#$B7#$9F +
#$A0#$A1#$A2#$B8#$A4#$A5#$A6#$A7#$A8#$A9#$AA#$AB#$AC#$AD#$AE#$AF +
#$B0#$B1#$B2#$A8#$B4#$B5#$B6#$B7#$B8#$B9#$BA#$BB#$BC#$BD#$BE#$A9 +
#$FE#$E0#$E1#$F6#$E4#$E5#$F4#$E3#$F5#$E8#$E9#$EA#$EB#$EC#$ED#$EE +
#$EF#$FF#$F0#$F1#$F2#$F3#$E6#$E2#$FC#$FB#$E7#$F8#$FD#$F9#$F7#$FA +
#$DE#$C0#$C1#$D6#$C4#$C5#$D4#$C3#$D5#$C8#$C9#$CA#$CB#$CC#$CD#$CE +
#$CF#$DF#$D0#$D1#$D2#$D3#$C6#$C2#$DC#$DB#$C7#$D8#$DD#$D9#$D7#$DA ;
convkoi8r_to_866 : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$C4#$B3#$DA#$BF#$C0#$D9#$C3#$B4#$C2#$C1#$C5#$DF#$DC#$DB#$DD#$DE +
#$B0#$B1#$B2#$93#$FE#$F9#$FB#$97#$98#$99#$FF#$9B#$F8#$9D#$FA#$9F +
#$CD#$BA#$D5#$F1#$D6#$C9#$B8#$B7#$BB#$D4#$D3#$C8#$BE#$BD#$BC#$C6 +
#$C7#$CC#$B5#$F0#$B6#$B9#$D1#$D2#$CB#$CF#$D0#$CA#$D8#$D7#$CE#$BF +
#$EE#$A0#$A1#$E6#$A4#$A5#$E4#$A3#$E5#$A8#$A9#$AA#$AB#$AC#$AD#$AE +
#$AF#$EF#$E0#$E1#$E2#$E3#$A6#$A2#$EC#$EB#$A7#$E8#$ED#$E9#$E7#$EA +
#$9E#$80#$81#$96#$84#$85#$94#$83#$95#$88#$89#$8A#$8B#$8C#$8D#$8E +
#$8F#$9F#$90#$91#$92#$93#$86#$82#$9C#$9B#$87#$98#$9D#$99#$97#$9A ;
convkoi8r_to_koi8u : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$80#$81#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F +
#$90#$91#$92#$93#$94#$95#$96#$97#$98#$99#$9A#$9B#$9C#$9D#$9E#$9F +
#$A0#$A1#$A2#$A3#$A4#$A5#$A6#$A7#$A8#$A9#$AA#$AB#$AC#$AD#$AE#$AF +
#$B0#$B1#$B2#$B3#$B4#$B5#$B6#$B7#$B8#$B9#$BA#$BB#$BC#$BD#$BE#$BF +
#$C0#$C1#$C2#$C3#$C4#$C5#$C6#$C7#$C8#$C9#$CA#$CB#$CC#$CD#$CE#$CF +
#$D0#$D1#$D2#$D3#$D4#$D5#$D6#$D7#$D8#$D9#$DA#$DB#$DC#$DD#$DE#$DF +
#$E0#$E1#$E2#$E3#$E4#$E5#$E6#$E7#$E8#$E9#$EA#$EB#$EC#$ED#$EE#$EF +
#$F0#$F1#$F2#$F3#$F4#$F5#$F6#$F7#$F8#$F9#$FA#$FB#$FC#$FD#$FE#$FF ;
convkoi8u_to_1251 : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$80#$81#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F +
#$90#$91#$92#$93#$94#$95#$96#$97#$98#$99#$A0#$9B#$B0#$9D#$B7#$9F +
#$A0#$A1#$A2#$B8#$BA#$A5#$B3#$BF#$A8#$A9#$AA#$AB#$AC#$B4#$AE#$AF +
#$B0#$B1#$B2#$A8#$81#$B5#$B2#$AF#$B8#$B9#$BA#$BB#$BC#$A5#$BE#$A9 +
#$FE#$E0#$E1#$F6#$E4#$E5#$F4#$E3#$F5#$E8#$E9#$EA#$EB#$EC#$ED#$EE +
#$EF#$FF#$F0#$F1#$F2#$F3#$E6#$E2#$FC#$FB#$E7#$F8#$FD#$F9#$F7#$FA +
#$DE#$C0#$C1#$D6#$C4#$C5#$D4#$C3#$D5#$C8#$C9#$CA#$CB#$CC#$CD#$CE +
#$CF#$DF#$D0#$D1#$D2#$D3#$C6#$C2#$DC#$DB#$C7#$D8#$DD#$D9#$D7#$DA ;
convkoi8u_to_866 : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$C4#$B3#$DA#$BF#$C0#$D9#$C3#$B4#$C2#$C1#$C5#$DF#$DC#$DB#$DD#$DE +
#$B0#$B1#$B2#$93#$FE#$F9#$FB#$97#$98#$99#$FF#$9B#$F8#$9D#$FA#$9F +
#$CD#$BA#$D5#$F1#$F3#$C9#$A6#$F5#$BB#$D4#$D3#$C8#$BE#$AD#$BC#$C6 +
#$C7#$CC#$B5#$F0#$B4#$B9#$B6#$F4#$CB#$CF#$D0#$CA#$D8#$BD#$CE#$BF +
#$EE#$A0#$A1#$E6#$A4#$A5#$E4#$A3#$E5#$A8#$A9#$AA#$AB#$AC#$AD#$AE +
#$AF#$EF#$E0#$E1#$E2#$E3#$A6#$A2#$EC#$EB#$A7#$E8#$ED#$E9#$E7#$EA +
#$9E#$80#$81#$96#$84#$85#$94#$83#$95#$88#$89#$8A#$8B#$8C#$8D#$8E +
#$8F#$9F#$90#$91#$92#$93#$86#$82#$9C#$9B#$87#$98#$9D#$99#$97#$9A ;
convkoi8u_to_koi8r : TCodeTable =
#$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0A#$0B#$0C#$0D#$0E#$0F +
#$10#$11#$12#$13#$14#$15#$16#$17#$18#$19#$1A#$1B#$1C#$1D#$1E#$1F +
#$20#$21#$22#$23#$24#$25#$26#$27#$28#$29#$2A#$2B#$2C#$2D#$2E#$2F +
#$30#$31#$32#$33#$34#$35#$36#$37#$38#$39#$3A#$3B#$3C#$3D#$3E#$3F +
#$40#$41#$42#$43#$44#$45#$46#$47#$48#$49#$4A#$4B#$4C#$4D#$4E#$4F +
#$50#$51#$52#$53#$54#$55#$56#$57#$58#$59#$5A#$5B#$5C#$5D#$5E#$5F +
#$60#$61#$62#$63#$64#$65#$66#$67#$68#$69#$6A#$6B#$6C#$6D#$6E#$6F +
#$70#$71#$72#$73#$74#$75#$76#$77#$78#$79#$7A#$7B#$7C#$7D#$7E#$7F +
#$80#$81#$82#$83#$84#$85#$86#$87#$88#$89#$8A#$8B#$8C#$8D#$8E#$8F +
#$90#$91#$92#$93#$94#$95#$96#$97#$98#$99#$9A#$9B#$9C#$9D#$9E#$9F +
#$A0#$A1#$A2#$A3#$A4#$A5#$A6#$A7#$A8#$A9#$AA#$AB#$AC#$AD#$AE#$AF +
#$B0#$B1#$B2#$B3#$B4#$B5#$B6#$B7#$B8#$B9#$BA#$BB#$BC#$BD#$BE#$BF +
#$C0#$C1#$C2#$C3#$C4#$C5#$C6#$C7#$C8#$C9#$CA#$CB#$CC#$CD#$CE#$CF +
#$D0#$D1#$D2#$D3#$D4#$D5#$D6#$D7#$D8#$D9#$DA#$DB#$DC#$DD#$DE#$DF +
#$E0#$E1#$E2#$E3#$E4#$E5#$E6#$E7#$E8#$E9#$EA#$EB#$EC#$ED#$EE#$EF +
#$F0#$F1#$F2#$F3#$F4#$F5#$F6#$F7#$F8#$F9#$FA#$FB#$FC#$FD#$FE#$FF ;
conv1251_to_U : TUCodeTable =
#$00#$00#$00#$01#$00#$02#$00#$03#$00#$04#$00#$05#$00#$06#$00#$07 +
#$00#$08#$00#$09#$00#$0A#$00#$0B#$00#$0C#$00#$0D#$00#$0E#$00#$0F +
#$00#$10#$00#$11#$00#$12#$00#$13#$00#$14#$00#$15#$00#$16#$00#$17 +
#$00#$18#$00#$19#$00#$1A#$00#$1B#$00#$1C#$00#$1D#$00#$1E#$00#$1F +
#$00#$20#$00#$21#$00#$22#$00#$23#$00#$24#$00#$25#$00#$26#$00#$27 +
#$00#$28#$00#$29#$00#$2A#$00#$2B#$00#$2C#$00#$2D#$00#$2E#$00#$2F +
#$00#$30#$00#$31#$00#$32#$00#$33#$00#$34#$00#$35#$00#$36#$00#$37 +
#$00#$38#$00#$39#$00#$3A#$00#$3B#$00#$3C#$00#$3D#$00#$3E#$00#$3F +
#$00#$40#$00#$41#$00#$42#$00#$43#$00#$44#$00#$45#$00#$46#$00#$47 +
#$00#$48#$00#$49#$00#$4A#$00#$4B#$00#$4C#$00#$4D#$00#$4E#$00#$4F +
#$00#$50#$00#$51#$00#$52#$00#$53#$00#$54#$00#$55#$00#$56#$00#$57 +
#$00#$58#$00#$59#$00#$5A#$00#$5B#$00#$5C#$00#$5D#$00#$5E#$00#$5F +
#$00#$60#$00#$61#$00#$62#$00#$63#$00#$64#$00#$65#$00#$66#$00#$67 +
#$00#$68#$00#$69#$00#$6A#$00#$6B#$00#$6C#$00#$6D#$00#$6E#$00#$6F +
#$00#$70#$00#$71#$00#$72#$00#$73#$00#$74#$00#$75#$00#$76#$00#$77 +
#$00#$78#$00#$79#$00#$7A#$00#$7B#$00#$7C#$00#$7D#$00#$7E#$00#$7F +
#$04#$02#$04#$03#$20#$1A#$04#$53#$20#$1E#$20#$26#$20#$20#$20#$21 +
#$20#$AC#$20#$30#$04#$09#$20#$39#$04#$0A#$04#$0C#$04#$0B#$04#$0F +
#$04#$52#$20#$18#$20#$19#$20#$1C#$20#$1D#$20#$22#$20#$13#$20#$14 +
#$00#$98#$21#$22#$04#$59#$20#$3A#$04#$5A#$04#$5C#$04#$5B#$04#$5F +
#$00#$A0#$04#$0E#$04#$5E#$04#$08#$00#$A4#$04#$90#$00#$A6#$00#$A7 +
#$04#$01#$00#$A9#$04#$04#$00#$AB#$00#$AC#$00#$AD#$00#$AE#$04#$07 +
#$00#$B0#$00#$B1#$04#$06#$04#$56#$04#$91#$00#$B5#$00#$B6#$00#$B7 +
#$04#$51#$21#$16#$04#$54#$00#$BB#$04#$58#$04#$05#$04#$55#$04#$57 +
#$04#$10#$04#$11#$04#$12#$04#$13#$04#$14#$04#$15#$04#$16#$04#$17 +
#$04#$18#$04#$19#$04#$1A#$04#$1B#$04#$1C#$04#$1D#$04#$1E#$04#$1F +
#$04#$20#$04#$21#$04#$22#$04#$23#$04#$24#$04#$25#$04#$26#$04#$27 +
#$04#$28#$04#$29#$04#$2A#$04#$2B#$04#$2C#$04#$2D#$04#$2E#$04#$2F +
#$04#$30#$04#$31#$04#$32#$04#$33#$04#$34#$04#$35#$04#$36#$04#$37 +
#$04#$38#$04#$39#$04#$3A#$04#$3B#$04#$3C#$04#$3D#$04#$3E#$04#$3F +
#$04#$40#$04#$41#$04#$42#$04#$43#$04#$44#$04#$45#$04#$46#$04#$47 +
#$04#$48#$04#$49#$04#$4A#$04#$4B#$04#$4C#$04#$4D#$04#$4E#$04#$4F ;
conv866_to_U : TUCodeTable =
#$00#$00#$00#$01#$00#$02#$00#$03#$00#$04#$00#$05#$00#$06#$00#$07 +
#$00#$08#$00#$09#$00#$0A#$00#$0B#$00#$0C#$00#$0D#$00#$0E#$00#$0F +
#$00#$10#$00#$11#$00#$12#$00#$13#$00#$14#$00#$15#$00#$16#$00#$17 +
#$00#$18#$00#$19#$00#$1A#$00#$1B#$00#$1C#$00#$1D#$00#$1E#$00#$1F +
#$00#$20#$00#$21#$00#$22#$00#$23#$00#$24#$00#$25#$00#$26#$00#$27 +
#$00#$28#$00#$29#$00#$2A#$00#$2B#$00#$2C#$00#$2D#$00#$2E#$00#$2F +
#$00#$30#$00#$31#$00#$32#$00#$33#$00#$34#$00#$35#$00#$36#$00#$37 +
#$00#$38#$00#$39#$00#$3A#$00#$3B#$00#$3C#$00#$3D#$00#$3E#$00#$3F +
#$00#$40#$00#$41#$00#$42#$00#$43#$00#$44#$00#$45#$00#$46#$00#$47 +
#$00#$48#$00#$49#$00#$4A#$00#$4B#$00#$4C#$00#$4D#$00#$4E#$00#$4F +
#$00#$50#$00#$51#$00#$52#$00#$53#$00#$54#$00#$55#$00#$56#$00#$57 +
#$00#$58#$00#$59#$00#$5A#$00#$5B#$00#$5C#$00#$5D#$00#$5E#$00#$5F +
#$00#$60#$00#$61#$00#$62#$00#$63#$00#$64#$00#$65#$00#$66#$00#$67 +
#$00#$68#$00#$69#$00#$6A#$00#$6B#$00#$6C#$00#$6D#$00#$6E#$00#$6F +
#$00#$70#$00#$71#$00#$72#$00#$73#$00#$74#$00#$75#$00#$76#$00#$77 +
#$00#$78#$00#$79#$00#$7A#$00#$7B#$00#$7C#$00#$7D#$00#$7E#$00#$7F +
#$04#$10#$04#$11#$04#$12#$04#$13#$04#$14#$04#$15#$04#$16#$04#$17 +
#$04#$18#$04#$19#$04#$1A#$04#$1B#$04#$1C#$04#$1D#$04#$1E#$04#$1F +
#$04#$20#$04#$21#$04#$22#$04#$23#$04#$24#$04#$25#$04#$26#$04#$27 +
#$04#$28#$04#$29#$04#$2A#$04#$2B#$04#$2C#$04#$2D#$04#$2E#$04#$2F +
#$04#$30#$04#$31#$04#$32#$04#$33#$04#$34#$04#$35#$04#$36#$04#$37 +
#$04#$38#$04#$39#$04#$3A#$04#$3B#$04#$3C#$04#$3D#$04#$3E#$04#$3F +
#$25#$91#$25#$92#$25#$93#$25#$02#$25#$24#$25#$61#$25#$62#$25#$56 +
#$25#$55#$25#$63#$25#$51#$25#$57#$25#$5D#$25#$5C#$25#$5B#$25#$10 +
#$25#$14#$25#$34#$25#$2C#$25#$1C#$25#$00#$25#$3C#$25#$5E#$25#$5F +
#$25#$5A#$25#$54#$25#$69#$25#$66#$25#$60#$25#$50#$25#$6C#$25#$67 +
#$25#$68#$25#$64#$25#$65#$25#$59#$25#$58#$25#$52#$25#$53#$25#$6B +
#$25#$6A#$25#$18#$25#$0C#$25#$88#$25#$84#$25#$8C#$25#$90#$25#$80 +
#$04#$40#$04#$41#$04#$42#$04#$43#$04#$44#$04#$45#$04#$46#$04#$47 +
#$04#$48#$04#$49#$04#$4A#$04#$4B#$04#$4C#$04#$4D#$04#$4E#$04#$4F +
#$04#$01#$04#$51#$04#$04#$04#$54#$04#$07#$04#$57#$04#$0E#$04#$5E +
#$00#$B0#$22#$19#$00#$B7#$22#$1A#$21#$16#$00#$A4#$25#$A0#$00#$A0 ;
convkoi8r_to_U : TUCodeTable =
#$00#$00#$00#$01#$00#$02#$00#$03#$00#$04#$00#$05#$00#$06#$00#$07 +
#$00#$08#$00#$09#$00#$0A#$00#$0B#$00#$0C#$00#$0D#$00#$0E#$00#$0F +
#$00#$10#$00#$11#$00#$12#$00#$13#$00#$14#$00#$15#$00#$16#$00#$17 +
#$00#$18#$00#$19#$00#$1A#$00#$1B#$00#$1C#$00#$1D#$00#$1E#$00#$1F +
#$00#$20#$00#$21#$00#$22#$00#$23#$00#$24#$00#$25#$00#$26#$00#$27 +
#$00#$28#$00#$29#$00#$2A#$00#$2B#$00#$2C#$00#$2D#$00#$2E#$00#$2F +
#$00#$30#$00#$31#$00#$32#$00#$33#$00#$34#$00#$35#$00#$36#$00#$37 +
#$00#$38#$00#$39#$00#$3A#$00#$3B#$00#$3C#$00#$3D#$00#$3E#$00#$3F +
#$00#$40#$00#$41#$00#$42#$00#$43#$00#$44#$00#$45#$00#$46#$00#$47 +
#$00#$48#$00#$49#$00#$4A#$00#$4B#$00#$4C#$00#$4D#$00#$4E#$00#$4F +
#$00#$50#$00#$51#$00#$52#$00#$53#$00#$54#$00#$55#$00#$56#$00#$57 +
#$00#$58#$00#$59#$00#$5A#$00#$5B#$00#$5C#$00#$5D#$00#$5E#$00#$5F +
#$00#$60#$00#$61#$00#$62#$00#$63#$00#$64#$00#$65#$00#$66#$00#$67 +
#$00#$68#$00#$69#$00#$6A#$00#$6B#$00#$6C#$00#$6D#$00#$6E#$00#$6F +
#$00#$70#$00#$71#$00#$72#$00#$73#$00#$74#$00#$75#$00#$76#$00#$77 +
#$00#$78#$00#$79#$00#$7A#$00#$7B#$00#$7C#$00#$7D#$00#$7E#$00#$7F +
#$25#$00#$25#$02#$25#$0C#$25#$10#$25#$14#$25#$18#$25#$1C#$25#$24 +
#$25#$2C#$25#$34#$25#$3C#$25#$80#$25#$84#$25#$88#$25#$8C#$25#$90 +
#$25#$91#$25#$92#$25#$93#$23#$20#$25#$A0#$22#$19#$22#$1A#$22#$48 +
#$22#$64#$22#$65#$00#$A0#$23#$21#$00#$B0#$00#$B2#$00#$B7#$00#$F7 +
#$25#$50#$25#$51#$25#$52#$04#$51#$25#$53#$25#$54#$25#$55#$25#$56 +
#$25#$57#$25#$58#$25#$59#$25#$5A#$25#$5B#$25#$5C#$25#$5D#$25#$5E +
#$25#$5F#$25#$60#$25#$61#$04#$01#$25#$62#$25#$63#$25#$64#$25#$65 +
#$25#$66#$25#$67#$25#$68#$25#$69#$25#$6A#$25#$6B#$25#$6C#$00#$A9 +
#$04#$4E#$04#$30#$04#$31#$04#$46#$04#$34#$04#$35#$04#$44#$04#$33 +
#$04#$45#$04#$38#$04#$39#$04#$3A#$04#$3B#$04#$3C#$04#$3D#$04#$3E +
#$04#$3F#$04#$4F#$04#$40#$04#$41#$04#$42#$04#$43#$04#$36#$04#$32 +
#$04#$4C#$04#$4B#$04#$37#$04#$48#$04#$4D#$04#$49#$04#$47#$04#$4A +
#$04#$2E#$04#$10#$04#$11#$04#$26#$04#$14#$04#$15#$04#$24#$04#$13 +
#$04#$25#$04#$18#$04#$19#$04#$1A#$04#$1B#$04#$1C#$04#$1D#$04#$1E +
#$04#$1F#$04#$2F#$04#$20#$04#$21#$04#$22#$04#$23#$04#$16#$04#$12 +
#$04#$2C#$04#$2B#$04#$17#$04#$28#$04#$2D#$04#$29#$04#$27#$04#$2A ;
convkoi8u_to_U : TUCodeTable =
#$00#$00#$00#$01#$00#$02#$00#$03#$00#$04#$00#$05#$00#$06#$00#$07 +
#$00#$08#$00#$09#$00#$0A#$00#$0B#$00#$0C#$00#$0D#$00#$0E#$00#$0F +
#$00#$10#$00#$11#$00#$12#$00#$13#$00#$14#$00#$15#$00#$16#$00#$17 +
#$00#$18#$00#$19#$00#$1A#$00#$1B#$00#$1C#$00#$1D#$00#$1E#$00#$1F +
#$00#$20#$00#$21#$00#$22#$00#$23#$00#$24#$00#$25#$00#$26#$00#$27 +
#$00#$28#$00#$29#$00#$2A#$00#$2B#$00#$2C#$00#$2D#$00#$2E#$00#$2F +
#$00#$30#$00#$31#$00#$32#$00#$33#$00#$34#$00#$35#$00#$36#$00#$37 +
#$00#$38#$00#$39#$00#$3A#$00#$3B#$00#$3C#$00#$3D#$00#$3E#$00#$3F +
#$00#$40#$00#$41#$00#$42#$00#$43#$00#$44#$00#$45#$00#$46#$00#$47 +
#$00#$48#$00#$49#$00#$4A#$00#$4B#$00#$4C#$00#$4D#$00#$4E#$00#$4F +
#$00#$50#$00#$51#$00#$52#$00#$53#$00#$54#$00#$55#$00#$56#$00#$57 +
#$00#$58#$00#$59#$00#$5A#$00#$5B#$00#$5C#$00#$5D#$00#$5E#$00#$5F +
#$00#$60#$00#$61#$00#$62#$00#$63#$00#$64#$00#$65#$00#$66#$00#$67 +
#$00#$68#$00#$69#$00#$6A#$00#$6B#$00#$6C#$00#$6D#$00#$6E#$00#$6F +
#$00#$70#$00#$71#$00#$72#$00#$73#$00#$74#$00#$75#$00#$76#$00#$77 +
#$00#$78#$00#$79#$00#$7A#$00#$7B#$00#$7C#$00#$7D#$00#$7E#$00#$7F +
#$25#$00#$25#$02#$25#$0C#$25#$10#$25#$14#$25#$18#$25#$1C#$25#$24 +
#$25#$2C#$25#$34#$25#$3C#$25#$80#$25#$84#$25#$88#$25#$8C#$25#$90 +
#$25#$91#$25#$92#$25#$93#$23#$20#$25#$A0#$22#$19#$22#$1A#$22#$48 +
#$22#$64#$22#$65#$00#$A0#$23#$21#$00#$B0#$00#$B2#$00#$B7#$00#$F7 +
#$25#$50#$25#$51#$25#$52#$04#$51#$04#$54#$25#$54#$04#$56#$04#$57 +
#$25#$57#$25#$58#$25#$59#$25#$5A#$25#$5B#$04#$91#$25#$5D#$25#$5E +
#$25#$5F#$25#$60#$25#$61#$04#$01#$04#$03#$25#$63#$04#$06#$04#$07 +
#$25#$66#$25#$67#$25#$68#$25#$69#$25#$6A#$04#$90#$25#$6C#$00#$A9 +
#$04#$4E#$04#$30#$04#$31#$04#$46#$04#$34#$04#$35#$04#$44#$04#$33 +
#$04#$45#$04#$38#$04#$39#$04#$3A#$04#$3B#$04#$3C#$04#$3D#$04#$3E +
#$04#$3F#$04#$4F#$04#$40#$04#$41#$04#$42#$04#$43#$04#$36#$04#$32 +
#$04#$4C#$04#$4B#$04#$37#$04#$48#$04#$4D#$04#$49#$04#$47#$04#$4A +
#$04#$2E#$04#$10#$04#$11#$04#$26#$04#$14#$04#$15#$04#$24#$04#$13 +
#$04#$25#$04#$18#$04#$19#$04#$1A#$04#$1B#$04#$1C#$04#$1D#$04#$1E +
#$04#$1F#$04#$2F#$04#$20#$04#$21#$04#$22#$04#$23#$04#$16#$04#$12 +
#$04#$2C#$04#$2B#$04#$17#$04#$28#$04#$2D#$04#$29#$04#$27#$04#$2A ;
cpconv_tables : array [cp1251..koi8u,cp1251..koi8u] of ^TCodeTable =
((nil,@conv1251_to_866,@conv1251_to_koi8r,@conv1251_to_koi8u),
(@conv866_to_1251,nil,@conv866_to_koi8r,@conv866_to_koi8u),
(@convkoi8r_to_1251,@convkoi8r_to_866,nil,@convkoi8r_to_koi8u),
(@convkoi8u_to_1251,@convkoi8u_to_866,@convkoi8u_to_koi8r,nil));
cpconv_tablesU : array [cp1251..koi8u] of ^TUCodeTable =
(@conv1251_to_U,@conv866_to_U,@convkoi8r_to_U,@convkoi8u_to_U);
// var
function Conv (cp_from,cp_to : TCodePage; str : String) : String;
function ConvU (cp_from : TCodePage; str : String) : String;
function ConvFromU (cp_to : TCodePage; str : String) : String;
//var
implementation
function Conv (cp_from,cp_to : TCodePage; str : String) :String;
var i : integer;
var tab : TCodeTable;
begin
tab := cpconv_tables[cp_from][cp_to]^;
result := '';
for i := 1 to Length(str) do
begin
result := result + tab[integer(str[i])];
end;
end;
function ConvU (cp_from : TCodePage; str : String) : String;
var i : integer;
var tab : TUCodeTable;
begin
tab := cpconv_tablesU[cp_from]^;
ConvU := '';
for i := 1 to Length(str) do
begin
result := result + tab[integer(str[i]) * 2 + 1] + tab[integer(str[i]) * 2];
end;
end;
function ConvFromU (cp_to : TCodePage; str : String) : String;
var i,j : integer;
tab : TUCodeTable;
s : char;
begin
tab := cpconv_tablesU[cp_to]^;
ConvFromU := '';
i := 0;
while i <= Length(str)/2-1 do
begin
s := #$00;
for j := 0 to 255 do
begin
if tab[j*2] + tab[j*2+1] = str[i*2] + str[i*2+1] then
begin
s := char(j);
break;
end;
end;
result := result + s;
i := i + 1;
end;
end;
end.
function DosToUnicode(var Text: string): boolean;
var InString, OutString, b: string;
i, Len: integer;
c: byte;
a: Char;
begin
Result:=true;
InString:=Text; OutString:='';
Len:=Length(InString);
try
b:=#255#254; OutString:=OutString+b;
for i:=1 to Len do begin
a:=InString[i];
c:=Ord(a);
case c of
{a english} 97: b:=#97#0; 98: b:=#98#0; 99: b:=#99#0; 100: b:=#100#0; 101: b:=#101#0; 102: b:=#102#0; 103: b:=#103#0; 104: b:=#104#0; 105: b:=#105#0; 106: b:=#106#0; 107: b:=#107#0; 108: b:=#108#0; 109: b:=#109#0; 110: b:=#110#0; 111: b:=#111#0; 112: b:=#112#0; 113: b:=#113#0; 114: b:=#114#0; 115: b:=#115#0; 116: b:=#116#0; 117: b:=#117#0; 118: b:=#118#0; 119: b:=#119#0; 120: b:=#120#0; 121: b:=#121#0; 122: b:=#122#0;
{A english} 65: b:=#65#0; 66: b:=#66#0; 67: b:=#67#0; 68: b:=#68#0; 69: b:=#69#0; 70: b:=#70#0; 71: b:=#71#0; 72: b:=#72#0; 73: b:=#73#0; 74: b:=#74#0; 75: b:=#75#0; 76: b:=#76#0; 77: b:=#77#0; 78: b:=#78#0; 79: b:=#79#0; 80: b:=#80#0; 81: b:=#81#0; 82: b:=#82#0; 83: b:=#83#0; 84: b:=#84#0; 85: b:=#85#0; 86: b:=#86#0; 87: b:=#87#0; 88: b:=#88#0; 89: b:=#89#0; 90: b:=#90#0;
{0..9} 48: b:=#48#0; 49: b:=#49#0; 50: b:=#50#0; 51: b:=#51#0; 52: b:=#52#0; 53: b:=#53#0; 54: b:=#54#0; 55: b:=#55#0; 56: b:=#56#0; 57: b:=#57#0;
{Спец символы} 33: b:=#33#0; 13: b:=#13#0; 9: b:=#9#0; 10: b:=#10#0; 32: b:=#32#0; 64: b:=#64#0; 35: b:=#35#0; 36: b:=#36#0; 37: b:=#37#0; 94: b:=#94#0; 38: b:=#38#0; 42: b:=#42#0; 40: b:=#40#0; 41: b:=#41#0; 45: b:=#45#0; 95: b:=#95#0; 43: b:=#43#0; 61: b:=#61#0; 92: b:=#92#0; 47: b:=#47#0; 124: b:=#124#0; 46: b:=#46#0; 44: b:=#44#0; 59: b:=#59#0; 58: b:=#58#0; 123: b:=#123#0; 125: b:=#125#0; 63: b:=#63#0; 60: b:=#60#0; 62: b:=#62#0; 34: b:=#34#0; 91: b:=#91#0; 93: b:=#93#0; 96: b:=#96#0; 126: b:=#126#0; 252: b:=#22#33;
{а русские} 160: b:=#48#4; 161: b:=#49#4; 162: b:=#50#4; 163: b:=#51#4; 164: b:=#52#4; 165: b:=#53#4; 166: b:=#54#4; 167: b:=#55#4; 168: b:=#56#4; 169: b:=#57#4; 170: b:=#58#4; 171: b:=#59#4; 172: b:=#60#4; 173: b:=#61#4; 174: b:=#62#4; 175: b:=#63#4; 224: b:=#64#4; 225: b:=#65#4; 226: b:=#66#4; 227: b:=#67#4; 228: b:=#68#4; 229: b:=#69#4; 230: b:=#70#4; 231: b:=#71#4; 232: b:=#72#4; 233: b:=#73#4; 234: b:=#74#4; 235: b:=#75#4; 236: b:=#76#4; 237: b:=#77#4; 238: b:=#78#4; 239: b:=#79#4; 241: b:=#81#4;
{А русские} 128: b:=#16#4; 129: b:=#17#4; 130: b:=#18#4; 131: b:=#19#4; 132: b:=#20#4; 133: b:=#21#4; 134: b:=#22#4; 135: b:=#23#4; 136: b:=#24#4; 137: b:=#25#4; 138: b:=#26#4; 139: b:=#27#4; 140: b:=#28#4; 141: b:=#29#4; 142: b:=#30#4; 143: b:=#31#4; 144: b:=#32#4; 145: b:=#33#4; 146: b:=#34#4; 147: b:=#35#4; 148: b:=#36#4; 149: b:=#37#4; 150: b:=#38#4; 151: b:=#39#4; 152: b:=#40#4; 153: b:=#41#4; 154: b:=#42#4; 155: b:=#43#4; 156: b:=#44#4; 157: b:=#45#4; 158: b:=#46#4; 159: b:=#47#4; 240: b:=#1#4
end;
OutString:=OutString+b
end;
Text:= OutString
except
Result:=false
end
end;
ViruZ писал(а):оригинальная программа вылетает в трубу с потерей измененных данных (пробовал DosBox).
function UnicodeToDos(var Text: string): boolean;
var InString, OutString: string;
i, Len: integer;
b: Char;
begin
Result:=true; i:=1;
InString:=Text; OutString:='';
Delete(InString, 1, 2);
Len:=Length(InString);
try
repeat
case InString[i+1] of
#0: case InString[i] of
{a english} #97: b:=#97; #98: b:=#98; #99: b:=#99; #100: b:=#100; #101: b:=#101; #102: b:=#102; #103: b:=#103; #104: b:=#104; #105: b:=#105; #106: b:=#106; #107: b:=#107; #108: b:=#108; #109: b:=#109; #110: b:=#110; #111: b:=#111; #112: b:=#112; #113: b:=#113; #114: b:=#114; #115: b:=#115; #116: b:=#116; #117: b:=#117; #118: b:=#118; #119: b:=#119; #120: b:=#120; #121: b:=#121; #122: b:=#122;
{A english} #65: b:=#65; #66: b:=#66; #67: b:=#67; #68: b:=#68; #69: b:=#67; #70: b:=#70; #71: b:=#71; #72: b:=#72; #73: b:=#73; #74: b:=#74; #75: b:=#75; #76: b:=#76; #77: b:=#77; #78: b:=#78; #79: b:=#79; #80: b:=#80; #81: b:=#81; #82: b:=#82; #83: b:=#83; #84: b:=#84; #85: b:=#85; #86: b:=#86; #87: b:=#87; #88: b:=#88; #89: b:=#89; #90: b:=#90;
{0..9} #48: b:=#48; #49: b:=#49; #50: b:=#50; #51: b:=#51; #52: b:=#52; #53: b:=#53; #54: b:=#54; #55: b:=#55; #56: b:=#56; #57: b:=#57;
{Спец символы} #33: b:=#33; #13: b:=#13; #9: b:=#9; #10: b:=#10; #32: b:=#32; #64: b:=#64; #35: b:=#35; #36: b:=#36; #37: b:=#37; #94: b:=#94; #38: b:=#38; #42: b:=#42; #40: b:=#40; #41: b:=#41; #45: b:=#45; #95: b:=#95; #43: b:=#43; #61: b:=#61; #92: b:=#92; #47: b:=#47; #124: b:=#124; #46: b:=#46; #44: b:=#44; #59: b:=#59; #58: b:=#58; #123: b:=#123; #125: b:=#125; #63: b:=#63; #60: b:=#60; #62: b:=#62; #34: b:=#34; #91: b:=#91; #93: b:=#93; #96: b:=#96; #126: b:=#126
end;
#4: case InString[i] of
{а русские} #48: b:=#160; #49: b:=#161; #50: b:=#162; #51: b:=#163; #52: b:=#164; #53: b:=#165; #54: b:=#166; #55: b:=#167; #56: b:=#168; #57: b:=#169; #58: b:=#170; #59: b:=#171; #60: b:=#172; #61: b:=#173; #62: b:=#174; #63: b:=#175; #64: b:=#224; #65: b:=#225; #66: b:=#226; #67: b:=#227; #68: b:=#228; #69: b:=#229; #70: b:=#230; #71: b:=#231; #72: b:=#232; #73: b:=#233; #74: b:=#234; #75: b:=#235; #76: b:=#236; #77: b:=#237; #78: b:=#238; #79: b:=#239; #81: b:=#241;
{А русские} #16: b:=#128; #17: b:=#129; #18: b:=#130; #19: b:=#131; #20: b:=#132; #21: b:=#133; #22: b:=#134; #23: b:=#135; #24: b:=#136; #25: b:=#137; #26: b:=#138; #27: b:=#139; #28: b:=#140; #29: b:=#141; #30: b:=#142; #31: b:=#143; #32: b:=#144; #33: b:=#145; #34: b:=#146; #35: b:=#147; #36: b:=#148; #37: b:=#149; #38: b:=#150; #39: b:=#151; #40: b:=#152; #41: b:=#153; #42: b:=#154; #43: b:=#155; #44: b:=#156; #45: b:=#157; #46: b:=#158; #47: b:=#159; #1: b:=#240
end
else if (InString[i]=#84) and (InString[i+1]=#70) then b:=#252
end;
OutString:=OutString+b;
i:=i+2
until i>Len;
Text:=OutString
except
Result:=false
end
end;
type
TUnicodeArray = array[0..8191] of word ;
PUnicodeArray = ^TUnicodeArray ;
const
UnicodeWinConvertTable : array[0..255] of word = (
$0000, {NULL }
$0001, {START OF HEADING }
$0002, {START OF TEXT }
$0003, {END OF TEXT }
$0004, {END OF TRANSMISSION }
$0005, {ENQUIRY }
$0006, {ACKNOWLEDGE }
$0007, {BELL }
$0008, {BACKSPACE }
$0009, {HORIZONTAL TABULATION }
$000A, {LINE FEED }
$000B, {VERTICAL TABULATION }
$000C, {FORM FEED }
$000D, {CARRIAGE RETURN }
$000E, {SHIFT OUT }
$000F, {SHIFT IN }
$0010, {DATA LINK ESCAPE }
$0011, {DEVICE CONTROL ONE }
$0012, {DEVICE CONTROL TWO }
$0013, {DEVICE CONTROL THREE }
$0014, {DEVICE CONTROL FOUR }
$0015, {NEGATIVE ACKNOWLEDGE }
$0016, {SYNCHRONOUS IDLE }
$0017, {END OF TRANSMISSION BLOCK }
$0018, {CANCEL }
$0019, {END OF MEDIUM }
$001A, {SUBSTITUTE }
$001B, {ESCAPE }
$001C, {FILE SEPARATOR }
$001D, {GROUP SEPARATOR }
$001E, {RECORD SEPARATOR }
$001F, {UNIT SEPARATOR }
$0020, {SPACE }
$0021, {EXCLAMATION MARK }
$0022, {QUOTATION MARK }
$0023, {NUMBER SIGN }
$0024, {DOLLAR SIGN }
$0025, {PERCENT SIGN }
$0026, {AMPERSAND }
$0027, {APOSTROPHE }
$0028, {LEFT PARENTHESIS }
$0029, {RIGHT PARENTHESIS }
$002A, {ASTERISK }
$002B, {PLUS SIGN }
$002C, {COMMA }
$002D, {HYPHEN-MINUS }
$002E, {FULL STOP }
$002F, {SOLIDUS }
$0030, {DIGIT ZERO }
$0031, {DIGIT ONE }
$0032, {DIGIT TWO }
$0033, {DIGIT THREE }
$0034, {DIGIT FOUR }
$0035, {DIGIT FIVE }
$0036, {DIGIT SIX }
$0037, {DIGIT SEVEN }
$0038, {DIGIT EIGHT }
$0039, {DIGIT NINE }
$003A, {COLON }
$003B, {SEMICOLON }
$003C, {LESS-THAN SIGN }
$003D, {EQUALS SIGN }
$003E, {GREATER-THAN SIGN }
$003F, {QUESTION MARK }
$0040, {COMMERCIAL AT }
$0041, {LATIN CAPITAL LETTER A }
$0042, {LATIN CAPITAL LETTER B }
$0043, {LATIN CAPITAL LETTER C }
$0044, {LATIN CAPITAL LETTER D }
$0045, {LATIN CAPITAL LETTER E }
$0046, {LATIN CAPITAL LETTER F }
$0047, {LATIN CAPITAL LETTER G }
$0048, {LATIN CAPITAL LETTER H }
$0049, {LATIN CAPITAL LETTER I }
$004A, {LATIN CAPITAL LETTER J }
$004B, {LATIN CAPITAL LETTER K }
$004C, {LATIN CAPITAL LETTER L }
$004D, {LATIN CAPITAL LETTER M }
$004E, {LATIN CAPITAL LETTER N }
$004F, {LATIN CAPITAL LETTER O }
$0050, {LATIN CAPITAL LETTER P }
$0051, {LATIN CAPITAL LETTER Q }
$0052, {LATIN CAPITAL LETTER R }
$0053, {LATIN CAPITAL LETTER S }
$0054, {LATIN CAPITAL LETTER T }
$0055, {LATIN CAPITAL LETTER U }
$0056, {LATIN CAPITAL LETTER V }
$0057, {LATIN CAPITAL LETTER W }
$0058, {LATIN CAPITAL LETTER X }
$0059, {LATIN CAPITAL LETTER Y }
$005A, {LATIN CAPITAL LETTER Z }
$005B, {LEFT SQUARE BRACKET }
$005C, {REVERSE SOLIDUS }
$005D, {RIGHT SQUARE BRACKET }
$005E, {CIRCUMFLEX ACCENT }
$005F, {LOW LINE }
$0060, {GRAVE ACCENT }
$0061, {LATIN SMALL LETTER A }
$0062, {LATIN SMALL LETTER B }
$0063, {LATIN SMALL LETTER C }
$0064, {LATIN SMALL LETTER D }
$0065, {LATIN SMALL LETTER E }
$0066, {LATIN SMALL LETTER F }
$0067, {LATIN SMALL LETTER G }
$0068, {LATIN SMALL LETTER H }
$0069, {LATIN SMALL LETTER I }
$006A, {LATIN SMALL LETTER J }
$006B, {LATIN SMALL LETTER K }
$006C, {LATIN SMALL LETTER L }
$006D, {LATIN SMALL LETTER M }
$006E, {LATIN SMALL LETTER N }
$006F, {LATIN SMALL LETTER O }
$0070, {LATIN SMALL LETTER P }
$0071, {LATIN SMALL LETTER Q }
$0072, {LATIN SMALL LETTER R }
$0073, {LATIN SMALL LETTER S }
$0074, {LATIN SMALL LETTER T }
$0075, {LATIN SMALL LETTER U }
$0076, {LATIN SMALL LETTER V }
$0077, {LATIN SMALL LETTER W }
$0078, {LATIN SMALL LETTER X }
$0079, {LATIN SMALL LETTER Y }
$007A, {LATIN SMALL LETTER Z }
$007B, {LEFT CURLY BRACKET }
$007C, {VERTICAL LINE }
$007D, {RIGHT CURLY BRACKET }
$007E, {TILDE }
$007F, {DELETE }
$0402, {CYRILLIC CAPITAL LETTER DJE }
$0403, {CYRILLIC CAPITAL LETTER GJE }
$201A, {SINGLE LOW-9 QUOTATION MARK }
$0453, {CYRILLIC SMALL LETTER GJE }
$201E, {DOUBLE LOW-9 QUOTATION MARK }
$2026, {HORIZONTAL ELLIPSIS }
$2020, {DAGGER }
$2021, {DOUBLE DAGGER }
$20AC, {EURO SIGN }
$2030, {PER MILLE SIGN }
$0409, {CYRILLIC CAPITAL LETTER LJE }
$2039, {SINGLE LEFT-POINTING ANGLE QUOTATION MARK }
$040A, {CYRILLIC CAPITAL LETTER NJE }
$040C, {CYRILLIC CAPITAL LETTER KJE }
$040B, {CYRILLIC CAPITAL LETTER TSHE }
$040F, {CYRILLIC CAPITAL LETTER DZHE }
$0452, {CYRILLIC SMALL LETTER DJE }
$2018, {LEFT SINGLE QUOTATION MARK }
$2019, {RIGHT SINGLE QUOTATION MARK }
$201C, {LEFT DOUBLE QUOTATION MARK }
$201D, {RIGHT DOUBLE QUOTATION MARK }
$2022, {BULLET }
$2013, {EN DASH }
$2014, {EM DASH }
$FFFF, {SPACE }
$2122, {TRADE MARK SIGN }
$0459, {CYRILLIC SMALL LETTER LJE }
$203A, {SINGLE RIGHT-POINTING ANGLE QUOTATION MARK }
$045A, {CYRILLIC SMALL LETTER NJE }
$045C, {CYRILLIC SMALL LETTER KJE }
$045B, {CYRILLIC SMALL LETTER TSHE }
$045F, {CYRILLIC SMALL LETTER DZHE }
$00A0, {NO-BREAK SPACE }
$040E, {CYRILLIC CAPITAL LETTER SHORT U }
$045E, {CYRILLIC SMALL LETTER SHORT U }
$0408, {CYRILLIC CAPITAL LETTER JE }
$00A4, {CURRENCY SIGN }
$0490, {CYRILLIC CAPITAL LETTER GHE WITH UPTURN }
$00A6, {BROKEN BAR }
$00A7, {SECTION SIGN }
$0401, {CYRILLIC CAPITAL LETTER IO }
$00A9, {COPYRIGHT SIGN }
$0404, {CYRILLIC CAPITAL LETTER UKRAINIAN IE }
$00AB, {LEFT-POINTING DOUBLE ANGLE QUOTATION MARK }
$00AC, {NOT SIGN }
$00AD, {SOFT HYPHEN }
$00AE, {REGISTERED SIGN }
$0407, {CYRILLIC CAPITAL LETTER YI }
$00B0, {DEGREE SIGN }
$00B1, {PLUS-MINUS SIGN }
$0406, {CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I }
$0456, {CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I }
$0491, {CYRILLIC SMALL LETTER GHE WITH UPTURN }
$00B5, {MICRO SIGN }
$00B6, {PILCROW SIGN }
$00B7, {MIDDLE DOT }
$0451, {CYRILLIC SMALL LETTER IO }
$2116, {NUMERO SIGN }
$0454, {CYRILLIC SMALL LETTER UKRAINIAN IE }
$00BB, {RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK }
$0458, {CYRILLIC SMALL LETTER JE }
$0405, {CYRILLIC CAPITAL LETTER DZE }
$0455, {CYRILLIC SMALL LETTER DZE }
$0457, {CYRILLIC SMALL LETTER YI }
$0410, {CYRILLIC CAPITAL LETTER A }
$0411, {CYRILLIC CAPITAL LETTER BE }
$0412, {CYRILLIC CAPITAL LETTER VE }
$0413, {CYRILLIC CAPITAL LETTER GHE }
$0414, {CYRILLIC CAPITAL LETTER DE }
$0415, {CYRILLIC CAPITAL LETTER IE }
$0416, {CYRILLIC CAPITAL LETTER ZHE }
$0417, {CYRILLIC CAPITAL LETTER ZE }
$0418, {CYRILLIC CAPITAL LETTER I }
$0419, {CYRILLIC CAPITAL LETTER SHORT I }
$041A, {CYRILLIC CAPITAL LETTER KA }
$041B, {CYRILLIC CAPITAL LETTER EL }
$041C, {CYRILLIC CAPITAL LETTER EM }
$041D, {CYRILLIC CAPITAL LETTER EN }
$041E, {CYRILLIC CAPITAL LETTER O }
$041F, {CYRILLIC CAPITAL LETTER PE }
$0420, {CYRILLIC CAPITAL LETTER ER }
$0421, {CYRILLIC CAPITAL LETTER ES }
$0422, {CYRILLIC CAPITAL LETTER TE }
$0423, {CYRILLIC CAPITAL LETTER U }
$0424, {CYRILLIC CAPITAL LETTER EF }
$0425, {CYRILLIC CAPITAL LETTER HA }
$0426, {CYRILLIC CAPITAL LETTER TSE }
$0427, {CYRILLIC CAPITAL LETTER CHE }
$0428, {CYRILLIC CAPITAL LETTER SHA }
$0429, {CYRILLIC CAPITAL LETTER SHCHA }
$042A, {CYRILLIC CAPITAL LETTER HARD SIGN }
$042B, {CYRILLIC CAPITAL LETTER YERU }
$042C, {CYRILLIC CAPITAL LETTER SOFT SIGN }
$042D, {CYRILLIC CAPITAL LETTER E }
$042E, {CYRILLIC CAPITAL LETTER YU }
$042F, {CYRILLIC CAPITAL LETTER YA }
$0430, {CYRILLIC SMALL LETTER A }
$0431, {CYRILLIC SMALL LETTER BE }
$0432, {CYRILLIC SMALL LETTER VE }
$0433, {CYRILLIC SMALL LETTER GHE }
$0434, {CYRILLIC SMALL LETTER DE }
$0435, {CYRILLIC SMALL LETTER IE }
$0436, {CYRILLIC SMALL LETTER ZHE }
$0437, {CYRILLIC SMALL LETTER ZE }
$0438, {CYRILLIC SMALL LETTER I }
$0439, {CYRILLIC SMALL LETTER SHORT I }
$043A, {CYRILLIC SMALL LETTER KA }
$043B, {CYRILLIC SMALL LETTER EL }
$043C, {CYRILLIC SMALL LETTER EM }
$043D, {CYRILLIC SMALL LETTER EN }
$043E, {CYRILLIC SMALL LETTER O }
$043F, {CYRILLIC SMALL LETTER PE }
$0440, {CYRILLIC SMALL LETTER ER }
$0441, {CYRILLIC SMALL LETTER ES }
$0442, {CYRILLIC SMALL LETTER TE }
$0443, {CYRILLIC SMALL LETTER U }
$0444, {CYRILLIC SMALL LETTER EF }
$0445, {CYRILLIC SMALL LETTER HA }
$0446, {CYRILLIC SMALL LETTER TSE }
$0447, {CYRILLIC SMALL LETTER CHE }
$0448, {CYRILLIC SMALL LETTER SHA }
$0449, {CYRILLIC SMALL LETTER SHCHA }
$044A, {CYRILLIC SMALL LETTER HARD SIGN }
$044B, {CYRILLIC SMALL LETTER YERU }
$044C, {CYRILLIC SMALL LETTER SOFT SIGN }
$044D, {CYRILLIC SMALL LETTER E }
$044E, {CYRILLIC SMALL LETTER YU }
$044F) ; {CYRILLIC SMALL LETTER YA }
procedure WinToUnicode(const S : string ; Result : PUnicodeArray) ; {отображение win1251 в Unicode}
var
I : word ; {счетчик символов}
begin
fillchar(Result^,sizeof(Result^),0) ;
Result^[0] := I ;
for I := 1 to length(S) do Result^[I] := UnicodeWinConvertTable[byte(S[I])] ;
end ;
00 = U+0000 : NULL
01 = U+0001 : START OF HEADING
02 = U+0002 : START OF TEXT
03 = U+0003 : END OF TEXT
04 = U+0004 : END OF TRANSMISSION
05 = U+0005 : ENQUIRY
06 = U+0006 : ACKNOWLEDGE
07 = U+0007 : BELL
08 = U+0008 : BACKSPACE
09 = U+0009 : HORIZONTAL TABULATION
0A = U+000A : LINE FEED
0B = U+000B : VERTICAL TABULATION
0C = U+000C : FORM FEED
0D = U+000D : CARRIAGE RETURN
0E = U+000E : SHIFT OUT
0F = U+000F : SHIFT IN
10 = U+0010 : DATA LINK ESCAPE
11 = U+0011 : DEVICE CONTROL ONE
12 = U+0012 : DEVICE CONTROL TWO
13 = U+0013 : DEVICE CONTROL THREE
14 = U+0014 : DEVICE CONTROL FOUR
15 = U+0015 : NEGATIVE ACKNOWLEDGE
16 = U+0016 : SYNCHRONOUS IDLE
17 = U+0017 : END OF TRANSMISSION BLOCK
18 = U+0018 : CANCEL
19 = U+0019 : END OF MEDIUM
1A = U+001A : SUBSTITUTE
1B = U+001B : ESCAPE
1C = U+001C : FILE SEPARATOR
1D = U+001D : GROUP SEPARATOR
1E = U+001E : RECORD SEPARATOR
1F = U+001F : UNIT SEPARATOR
20 = U+0020 : SPACE
21 = U+0021 : EXCLAMATION MARK
22 = U+0022 : QUOTATION MARK
23 = U+0023 : NUMBER SIGN
24 = U+0024 : DOLLAR SIGN
25 = U+0025 : PERCENT SIGN
26 = U+0026 : AMPERSAND
27 = U+0027 : APOSTROPHE
28 = U+0028 : LEFT PARENTHESIS
29 = U+0029 : RIGHT PARENTHESIS
2A = U+002A : ASTERISK
2B = U+002B : PLUS SIGN
2C = U+002C : COMMA
2D = U+002D : HYPHEN-MINUS
2E = U+002E : FULL STOP
2F = U+002F : SOLIDUS
30 = U+0030 : DIGIT ZERO
31 = U+0031 : DIGIT ONE
32 = U+0032 : DIGIT TWO
33 = U+0033 : DIGIT THREE
34 = U+0034 : DIGIT FOUR
35 = U+0035 : DIGIT FIVE
36 = U+0036 : DIGIT SIX
37 = U+0037 : DIGIT SEVEN
38 = U+0038 : DIGIT EIGHT
39 = U+0039 : DIGIT NINE
3A = U+003A : COLON
3B = U+003B : SEMICOLON
3C = U+003C : LESS-THAN SIGN
3D = U+003D : EQUALS SIGN
3E = U+003E : GREATER-THAN SIGN
3F = U+003F : QUESTION MARK
40 = U+0040 : COMMERCIAL AT
41 = U+0041 : LATIN CAPITAL LETTER A
42 = U+0042 : LATIN CAPITAL LETTER B
43 = U+0043 : LATIN CAPITAL LETTER C
44 = U+0044 : LATIN CAPITAL LETTER D
45 = U+0045 : LATIN CAPITAL LETTER E
46 = U+0046 : LATIN CAPITAL LETTER F
47 = U+0047 : LATIN CAPITAL LETTER G
48 = U+0048 : LATIN CAPITAL LETTER H
49 = U+0049 : LATIN CAPITAL LETTER I
4A = U+004A : LATIN CAPITAL LETTER J
4B = U+004B : LATIN CAPITAL LETTER K
4C = U+004C : LATIN CAPITAL LETTER L
4D = U+004D : LATIN CAPITAL LETTER M
4E = U+004E : LATIN CAPITAL LETTER N
4F = U+004F : LATIN CAPITAL LETTER O
50 = U+0050 : LATIN CAPITAL LETTER P
51 = U+0051 : LATIN CAPITAL LETTER Q
52 = U+0052 : LATIN CAPITAL LETTER R
53 = U+0053 : LATIN CAPITAL LETTER S
54 = U+0054 : LATIN CAPITAL LETTER T
55 = U+0055 : LATIN CAPITAL LETTER U
56 = U+0056 : LATIN CAPITAL LETTER V
57 = U+0057 : LATIN CAPITAL LETTER W
58 = U+0058 : LATIN CAPITAL LETTER X
59 = U+0059 : LATIN CAPITAL LETTER Y
5A = U+005A : LATIN CAPITAL LETTER Z
5B = U+005B : LEFT SQUARE BRACKET
5C = U+005C : REVERSE SOLIDUS
5D = U+005D : RIGHT SQUARE BRACKET
5E = U+005E : CIRCUMFLEX ACCENT
5F = U+005F : LOW LINE
60 = U+0060 : GRAVE ACCENT
61 = U+0061 : LATIN SMALL LETTER A
62 = U+0062 : LATIN SMALL LETTER B
63 = U+0063 : LATIN SMALL LETTER C
64 = U+0064 : LATIN SMALL LETTER D
65 = U+0065 : LATIN SMALL LETTER E
66 = U+0066 : LATIN SMALL LETTER F
67 = U+0067 : LATIN SMALL LETTER G
68 = U+0068 : LATIN SMALL LETTER H
69 = U+0069 : LATIN SMALL LETTER I
6A = U+006A : LATIN SMALL LETTER J
6B = U+006B : LATIN SMALL LETTER K
6C = U+006C : LATIN SMALL LETTER L
6D = U+006D : LATIN SMALL LETTER M
6E = U+006E : LATIN SMALL LETTER N
6F = U+006F : LATIN SMALL LETTER O
70 = U+0070 : LATIN SMALL LETTER P
71 = U+0071 : LATIN SMALL LETTER Q
72 = U+0072 : LATIN SMALL LETTER R
73 = U+0073 : LATIN SMALL LETTER S
74 = U+0074 : LATIN SMALL LETTER T
75 = U+0075 : LATIN SMALL LETTER U
76 = U+0076 : LATIN SMALL LETTER V
77 = U+0077 : LATIN SMALL LETTER W
78 = U+0078 : LATIN SMALL LETTER X
79 = U+0079 : LATIN SMALL LETTER Y
7A = U+007A : LATIN SMALL LETTER Z
7B = U+007B : LEFT CURLY BRACKET
7C = U+007C : VERTICAL LINE
7D = U+007D : RIGHT CURLY BRACKET
7E = U+007E : TILDE
7F = U+007F : DELETE
80 = U+0410 : CYRILLIC CAPITAL LETTER A
81 = U+0411 : CYRILLIC CAPITAL LETTER BE
82 = U+0412 : CYRILLIC CAPITAL LETTER VE
83 = U+0413 : CYRILLIC CAPITAL LETTER GHE
84 = U+0414 : CYRILLIC CAPITAL LETTER DE
85 = U+0415 : CYRILLIC CAPITAL LETTER IE
86 = U+0416 : CYRILLIC CAPITAL LETTER ZHE
87 = U+0417 : CYRILLIC CAPITAL LETTER ZE
88 = U+0418 : CYRILLIC CAPITAL LETTER I
89 = U+0419 : CYRILLIC CAPITAL LETTER SHORT I
8A = U+041A : CYRILLIC CAPITAL LETTER KA
8B = U+041B : CYRILLIC CAPITAL LETTER EL
8C = U+041C : CYRILLIC CAPITAL LETTER EM
8D = U+041D : CYRILLIC CAPITAL LETTER EN
8E = U+041E : CYRILLIC CAPITAL LETTER O
8F = U+041F : CYRILLIC CAPITAL LETTER PE
90 = U+0420 : CYRILLIC CAPITAL LETTER ER
91 = U+0421 : CYRILLIC CAPITAL LETTER ES
92 = U+0422 : CYRILLIC CAPITAL LETTER TE
93 = U+0423 : CYRILLIC CAPITAL LETTER U
94 = U+0424 : CYRILLIC CAPITAL LETTER EF
95 = U+0425 : CYRILLIC CAPITAL LETTER HA
96 = U+0426 : CYRILLIC CAPITAL LETTER TSE
97 = U+0427 : CYRILLIC CAPITAL LETTER CHE
98 = U+0428 : CYRILLIC CAPITAL LETTER SHA
99 = U+0429 : CYRILLIC CAPITAL LETTER SHCHA
9A = U+042A : CYRILLIC CAPITAL LETTER HARD SIGN
9B = U+042B : CYRILLIC CAPITAL LETTER YERU
9C = U+042C : CYRILLIC CAPITAL LETTER SOFT SIGN
9D = U+042D : CYRILLIC CAPITAL LETTER E
9E = U+042E : CYRILLIC CAPITAL LETTER YU
9F = U+042F : CYRILLIC CAPITAL LETTER YA
A0 = U+0430 : CYRILLIC SMALL LETTER A
A1 = U+0431 : CYRILLIC SMALL LETTER BE
A2 = U+0432 : CYRILLIC SMALL LETTER VE
A3 = U+0433 : CYRILLIC SMALL LETTER GHE
A4 = U+0434 : CYRILLIC SMALL LETTER DE
A5 = U+0435 : CYRILLIC SMALL LETTER IE
A6 = U+0436 : CYRILLIC SMALL LETTER ZHE
A7 = U+0437 : CYRILLIC SMALL LETTER ZE
A8 = U+0438 : CYRILLIC SMALL LETTER I
A9 = U+0439 : CYRILLIC SMALL LETTER SHORT I
AA = U+043A : CYRILLIC SMALL LETTER KA
AB = U+043B : CYRILLIC SMALL LETTER EL
AC = U+043C : CYRILLIC SMALL LETTER EM
AD = U+043D : CYRILLIC SMALL LETTER EN
AE = U+043E : CYRILLIC SMALL LETTER O
AF = U+043F : CYRILLIC SMALL LETTER PE
B0 = U+2591 : LIGHT SHADE
B1 = U+2592 : MEDIUM SHADE
B2 = U+2593 : DARK SHADE
B3 = U+2502 : BOX DRAWINGS LIGHT VERTICAL
B4 = U+2524 : BOX DRAWINGS LIGHT VERTICAL AND LEFT
B5 = U+2561 : BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
B6 = U+2562 : BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
B7 = U+2556 : BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
B8 = U+2555 : BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
B9 = U+2563 : BOX DRAWINGS DOUBLE VERTICAL AND LEFT
BA = U+2551 : BOX DRAWINGS DOUBLE VERTICAL
BB = U+2557 : BOX DRAWINGS DOUBLE DOWN AND LEFT
BC = U+255D : BOX DRAWINGS DOUBLE UP AND LEFT
BD = U+255C : BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
BE = U+255B : BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
BF = U+2510 : BOX DRAWINGS LIGHT DOWN AND LEFT
C0 = U+2514 : BOX DRAWINGS LIGHT UP AND RIGHT
C1 = U+2534 : BOX DRAWINGS LIGHT UP AND HORIZONTAL
C2 = U+252C : BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
C3 = U+251C : BOX DRAWINGS LIGHT VERTICAL AND RIGHT
C4 = U+2500 : BOX DRAWINGS LIGHT HORIZONTAL
C5 = U+253C : BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
C6 = U+255E : BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
C7 = U+255F : BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
C8 = U+255A : BOX DRAWINGS DOUBLE UP AND RIGHT
C9 = U+2554 : BOX DRAWINGS DOUBLE DOWN AND RIGHT
CA = U+2569 : BOX DRAWINGS DOUBLE UP AND HORIZONTAL
CB = U+2566 : BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
CC = U+2560 : BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
CD = U+2550 : BOX DRAWINGS DOUBLE HORIZONTAL
CE = U+256C : BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
CF = U+2567 : BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
D0 = U+2568 : BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
D1 = U+2564 : BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
D2 = U+2565 : BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
D3 = U+2559 : BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
D4 = U+2558 : BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
D5 = U+2552 : BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
D6 = U+2553 : BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
D7 = U+256B : BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
D8 = U+256A : BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
D9 = U+2518 : BOX DRAWINGS LIGHT UP AND LEFT
DA = U+250C : BOX DRAWINGS LIGHT DOWN AND RIGHT
DB = U+2588 : FULL BLOCK
DC = U+2584 : LOWER HALF BLOCK
DD = U+258C : LEFT HALF BLOCK
DE = U+2590 : RIGHT HALF BLOCK
DF = U+2580 : UPPER HALF BLOCK
E0 = U+0440 : CYRILLIC SMALL LETTER ER
E1 = U+0441 : CYRILLIC SMALL LETTER ES
E2 = U+0442 : CYRILLIC SMALL LETTER TE
E3 = U+0443 : CYRILLIC SMALL LETTER U
E4 = U+0444 : CYRILLIC SMALL LETTER EF
E5 = U+0445 : CYRILLIC SMALL LETTER HA
E6 = U+0446 : CYRILLIC SMALL LETTER TSE
E7 = U+0447 : CYRILLIC SMALL LETTER CHE
E8 = U+0448 : CYRILLIC SMALL LETTER SHA
E9 = U+0449 : CYRILLIC SMALL LETTER SHCHA
EA = U+044A : CYRILLIC SMALL LETTER HARD SIGN
EB = U+044B : CYRILLIC SMALL LETTER YERU
EC = U+044C : CYRILLIC SMALL LETTER SOFT SIGN
ED = U+044D : CYRILLIC SMALL LETTER E
EE = U+044E : CYRILLIC SMALL LETTER YU
EF = U+044F : CYRILLIC SMALL LETTER YA
F0 = U+0401 : CYRILLIC CAPITAL LETTER IO
F1 = U+0451 : CYRILLIC SMALL LETTER IO
F2 = U+0404 : CYRILLIC CAPITAL LETTER UKRAINIAN IE
F3 = U+0454 : CYRILLIC SMALL LETTER UKRAINIAN IE
F4 = U+0407 : CYRILLIC CAPITAL LETTER YI
F5 = U+0457 : CYRILLIC SMALL LETTER YI
F6 = U+040E : CYRILLIC CAPITAL LETTER SHORT U
F7 = U+045E : CYRILLIC SMALL LETTER SHORT U
F8 = U+00B0 : DEGREE SIGN
F9 = U+2219 : BULLET OPERATOR
FA = U+00B7 : MIDDLE DOT
FB = U+221A : SQUARE ROOT
FC = U+2116 : NUMERO SIGN
FD = U+00A4 : CURRENCY SIGN
FE = U+25A0 : BLACK SQUARE
FF = U+00A0 : NO-BREAK SPACE
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
unit mseucs2toru;
{$ifdef FPC}{$mode objfpc}{$h+}{$endif}
interface
function ucs2to866(const avalue: widechar): char;
function ucs2to866(const avalue: widestring): ansistring;
implementation
const
cp866_2: array[$2550..$256C] of byte = (
$cd,$ba,$d5,$d6,$c9,$b8,$b7,$bb,$d4,$d3,$c8,$be,$bd,$bc,$c6,
$c7,$cc,$b5,$b6,$b9,$d1,$d2,$cb,$cf,$d0,$ca,$d8,$d7,$ce
);
function ucs2to866(const avalue: widechar): char;
var
i: cardinal;
begin
i:= cardinal(avalue);
case i of
$0..$7f: result:= char(avalue);
$A0: result:= char($ff);
$A4: result:= char($fd);
$B0,$BA: result:= char($f8);
$B7: result:= char($fa);
$401: result:= char($f0);
$404: result:= char($f2);
$407: result:= char($f4);
$40E: result:= char($f6);
$410..$43f: result:= char(i-$390);
$440..$44f: result:= char(i-$360);
$451: result:= char($f1);
$454: result:= char($f3);
$457: result:= char($f5);
$45E: result:= char($f7);
$2116: result:= char($fc);
$2219: result:= char($f9);
$221A: result:= char($fb);
$2500: result:= char($c4);
$2502: result:= char($b3);
$250C: result:= char($da);
$2510: result:= char($bf);
$2514: result:= char($c0);
$2518: result:= char($d9);
$251C: result:= char($c3);
$2524: result:= char($b4);
$252C: result:= char($c2);
$2534: result:= char($c1);
$253C: result:= char($c5);
$2550..$256C: result:= char(cp866_2[i]);
$2580: result:= char($df);
$2584: result:= char($dc);
$2588: result:= char($db);
$258C: result:= char($dd);
$2590: result:= char($de);
$2591: result:= char($b0);
$2592: result:= char($b1);
$2593: result:= char($b2);
$25A0: result:= char($fe);
else
result:= char($20);
end;
end;
function ucs2to866(const avalue: widestring): ansistring;
var
i,i1: integer;
begin
i1:= length(avalue);
setlength(result,i1);
for i:= 1 to i1 do begin
result[i]:= ucs2to866(avalue[i]);
end;
end;
end.
GTK2. KDE 3.5.7. openSuSE 10.3. Kernel - 2.6.22.-13.haword писал(а):Один вопросик, ты в GTK1 пытаешся просмотреть UTF текст?
VirtUX писал(а):В каталог обмена приходит текстовый файл с кодировкой CP866 с Windows-server. На Linux-client нужно подхватить этот файл и содержимое отобразить в TMemo или TListBox или TEdit. В файле присутствуют спецсимволы - [250], [254] и другие.
Пробовал функции Attid - не помогло - иероглифы.
Куда копать?
iconv -f CP866 -t UTF-8 -o file file.utf
var W:widestring;
U:UtfString; // тот же AnsiString см ниже
SetLength(W,3);
W[1] := #$42D; // буква 'Э'
W[2] := #$445; // буква 'х'
W[3] := #$43E; // буква 'о'
U:=Wide2Utf(W); // получаем utf-8 строку
type
UtfString = AnsiString;
Unicode = cardinal;
var
// unknown replaced
DefChar : Char = '?';
DefWideChar : WideChar = #$FFFD;
DefUnicode : Unicode = $80000000;
function IncLen(var DST:string;PD,LS,PS:Integer;
LN:Integer=1;AD:Integer=0):boolean;
// Увеличить если требуется длину приёмника (пропорционально PS)
// PD - текущая позиция в приёмнике
// LS - длина строки источника
// PS - текущая позиция в источнике !!! PS<>0
// LN - сколько символов будет добавлено
// AD - добавить в нагрузку
function LengthUtfChar(const P:PChar):Integer;
function LengthUnicode(U:Unicode):Integer;
function Utf2Uni( UC:PChar; L:Integer ):Unicode; overload;
function Utf2Uni( UC:PChar ):Unicode; overload;
function Uni2Utf( UC:PChar; U :Unicode; L:Integer):Integer; overload;// dangerous
function Uni2Utf( UC:PChar; U :Unicode ):Integer; overload;// dangerous
function Utf8(U:Unicode):string;
function Utf2Wide(const S:UtfString):WideString;
function Wide2Utf(const S:WideString):UtfString;
function IncLen(var DST:string;PD,LS,PS:Integer;
LN:Integer=1;AD:Integer=0):boolean;
var L:Int64; // не Integer, иначе получите из положительных отрицательные
begin
L:=PD+LN-1;
Result:= L>Length(DST);
if not Result then exit;
L:=L*LS div PS + AD;
// if L<Length(DST) then raise // повидимому переполнение
// Exception.Create('IncLen: попытка установить меньший размер строки');
SetLength(DST,L);
end;
function LengthUtfChar(const P:PChar):Integer;
begin
if P^ < #$C0 then Result:=1 else
if P^ < #$E0 then
if (byte(P[1]) and $C0) = $80
then Result:=2 else Result:=1 else
if P^ < #$F0 then
if ((byte(P[1]) and $C0) = $80)
and((byte(P[2]) and $C0) = $80)
then Result:=3 else Result:=1 else
if P^ < #$F8 then
if ((byte(P[1]) and $C0) = $80)
and((byte(P[2]) and $C0) = $80)
and((byte(P[3]) and $C0) = $80)
then Result:=4 else Result:=1 else
if P^ < #$FC then
if ((byte(P[1]) and $C0) = $80)
and((byte(P[2]) and $C0) = $80)
and((byte(P[3]) and $C0) = $80)
and((byte(P[4]) and $C0) = $80)
then Result:=5 else Result:=1 else
if P^ < #$FE then
if ((byte(P[1]) and $C0) = $80)
and((byte(P[2]) and $C0) = $80)
and((byte(P[3]) and $C0) = $80)
and((byte(P[4]) and $C0) = $80)
and((byte(P[5]) and $C0) = $80)
then Result:=6 else Result:=1 else
Result:=1;
end;
function LengthUnicode(U:Unicode):Integer;
begin
{$ifdef PACKUTF8}
if U < $000000C0 then Result:=1 else
if U < $00000800 then
if(U = $000000FE)
or(U = $000000FF)then Result:=1
else Result:=2 else
{$else PACKUTF8}
if U < $00000080 then Result:=1 else
if U < $00000800 then Result:=2 else
{$endif PACKUTF8}
if U < $00010000 then Result:=3 else
if U < $00200000 then Result:=4 else
if U < $04000000 then Result:=5 else
if U < $80000000 then Result:=6 else Result:=0;
end;
function Utf2Uni( UC:PChar; L:Integer ):Unicode;
begin
case L of
1 : Result := byte(UC^);
2 : Result := (byte(UC^ ) and $1F) shl 6
or (byte(UC[1]) and $3F);
3 : Result := ((byte(UC^ ) and $0F) shl 6
or (byte(UC[1]) and $3F)) shl 6
or (byte(UC[2]) and $3F);
4 : Result := (((byte(UC^) and $07) shl 6
or (byte(UC[1]) and $3F)) shl 6
or (byte(UC[2]) and $3F)) shl 6
or (byte(UC[3]) and $3F);
5 : Result := ((((byte(UC^)and $03) shl 6
or (byte(UC[1]) and $3F)) shl 6
or (byte(UC[2]) and $3F)) shl 6
or (byte(UC[3]) and $3F)) shl 6
or (byte(UC[4]) and $3F);
6 : Result :=(((((byte(UC^)and $01) shl 6
or (byte(UC[1]) and $3F)) shl 6
or (byte(UC[2]) and $3F)) shl 6
or (byte(UC[3]) and $3F)) shl 6
or (byte(UC[4]) and $3F)) shl 6
or (byte(UC[5]) and $3F);
else Result:=DefUnicode;
end;
end;
function Utf2Uni( UC:PChar ):Unicode;
begin
Result := Utf2Uni( UC, LengthUtfChar(UC));
end;
function Uni2Utf( UC:PChar; U :Unicode; L:Integer):Integer;
// dangerous
var PC:PChar;
begin
Result := L;
if Result = 0 then exit;
L := Result - 1;
PC := UC + L;
while L > 0 do begin
PC^ := chr( U and $3F or $80);
U := U shr 6;
dec( PC ); dec(L);
end;
case Result of
//1 : PC^ := chr(U {and $FF} );
2 : PC^ := chr(U {and $1F} or $C0);
3 : PC^ := chr(U {and $0F} or $E0);
4 : PC^ := chr(U {and $07} or $F0);
5 : PC^ := chr(U {and $03} or $F8);
6 : PC^ := chr(U {and $01} or $FC);
else PC^ := chr(U {and $FF} );
end;
end;
function Uni2Utf( UC:PChar; U :Unicode):Integer; // dangerous
begin
Result := LengthUnicode(U);
Result := Uni2Utf(UC,U,Result);
end;
function Utf8(U:Unicode):string;
var L:Integer;
begin
L := LengthUnicode(U);
SetLength(Result,L);
Uni2Utf(@Result[1],U,L);
end;
function Utf2Wide(const S:UtfString):WideString;
var PC:PChar; I,J,L:Integer; U:Unicode;
begin
SetLength(Result,Length(S));
I:=1; J:=0; PC:=@S[1];
while I<=Length(S) do begin
L:=LengthUtfChar(PC);
U:=Utf2Uni(PC,L);
if (U and $FFFF) <> U then U:=word(DefWideChar);
inc(J);
Result[J]:=WideChar(U);
inc(PC,L);
inc(I,L);
end;
SetLength(Result,J);
end;
function Wide2Utf(const S:WideString):UtfString;
var I,J,L:Integer; PC:PChar; U:Unicode;
begin
SetLength(Result,Length(S));
PC:=@Result[1]; J:=1{0};
for I:=1 to Length(S) do begin
U:=Unicode(S[1]);
L:=LengthUnicode(U);
IncLen(Result,J,Length(S),I,L,6);
//if J+L>Length(Result) then
// SetLength(Result,Length(S)*(J+L) div I + 6);
Uni2Utf(PC,U,L);
inc(PC,L);
inc(J,L);
end;
SetLength(Result,J-1{0});
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23