一个数据库应用程序。我别另一台机器的区域和语言改成中文(香港特别行政区)为了测试繁体环境下简体应用程序的乱码问题,我用的是applocale界面完全正常显示成简体了。但是在录入数据时似乎会丢失一部分数据,为何?比如我新增一条数据其中一个字段值“企业老总”,他只保存了前面两个字“企业”,晕了。在简体下没有这个问题啊。主要是想知道使用applocale转化时数据库的表是否要改?存进去的到底是简体还是繁体
或者解决我简体中文环境下开发的软件能在繁体下运行也可以,数据库是SQL英文版的。找了好多关于内码转换的,但不熟悉这个东东,也太麻烦了。求各位前辈赐教!!!!

解决方案 »

  1.   

    企业老总 = 企业?
    try Field.DataSize*2 haha
      

  2.   

    企业老总 = 企业?
    try Field.DataSize*2 haha
      

  3.   

    以下是我CSDN文摘中的,供你参考简繁转换的方法    
      简繁转换简单说可以有3种方法:API法、码表法、对照表法,扩展一下又可以及拆分,码表发可以分为文件码表和对照码表2种方式,还可以增加MLANG方法,当然这种方法用的相对很少,可能很多人根本就没有听说,下面可以一一列举。   
        
      1、API方法,这是Windows下开发最常用最简单的方法,利用Windows系统自带的API函数,寥寥数行代码即可完成,典型的例子就是Windows2000自带的例子,核心代码可以简单列一个   
      function   GB2312ToBIG5(GB2312Str:   string):   AnsiString;   
      var   
          iLen:   Integer;   
          PGBCHSStr:   PChar;   //GB编码的简体字符   
          PGBCHTStr:   PChar;   //GB编码的繁体字符   
          PUnicodeChar:   PWideChar;   //Unicode编码的字符   
          PBIG5Str:   PChar;   //BIG5编码的字符   
      begin   
          PGBCHSStr:=PChar(GB2312Str);   
          iLen:=MultiByteToWideChar(936,0,PGBCHSStr,-1,nil,0);   //计算转换的字符数   
          GetMem(PGBCHTStr,iLen*2+1);   //分配内存   
          LCMapString($0804,LCMAP_TRADITIONAL_CHINESE,PGBCHSStr,-1,PGBCHTStr,iLen*2);   //转换GB码简体到GB码繁体   
          GetMem(PUnicodeChar,iLen*2);   //分配内存   
          MultiByteToWideChar(936,0,PGBCHTStr,-1,PUnicodeChar,iLen);   //转换GB码到Unicode码   
          iLen:=WideCharToMultiByte(950,0,PUnicodeChar,-1,nil,0,nil,nil);   
          GetMem(PBIG5Str,iLen);   
          WideCharToMultiByte(950,0,PUnicodeChar,-1,PBIG5Str,iLen,nil,nil);   
          Result:=string(PBIG5Str);   
          FreeMem(PBIG5Str);   
          FreeMem(PUnicodeChar);   
          FreeMem(PGBCHTStr);   
      end;   
      这是Delphi的方式,根据变量定义模式及开发工具不同,代码量会不同,但核心的就那几行   
        
      2、码表法有2种,一种是文件模式,一种是对照码表模式   
            文件模式   
            如果十年前你接触过软件开发,通过C语言调用UCDOS的字库显示汉字这招应该玩过,那么这个原理是一样的,条件是找一个合适的字库。该方法主要利用了gb-big5.tab或big5-gb.tab等码表文件进行,这种方式在网络开发及JAVA开发中用的特别多,核心代码也很简单   
      #define   TABLE   "gb-big5.tab"       
      extern   void   usage(void);   
      extern   void   convert(FILE   *fp);       
      void   main(int   argc,char   **argv)   
      {   
          char   *source;   
          FILE   *fp;   
          if   (argc!=2)   usage();   
          source=argv[1];   
          setbuf(stdout,NULL);   
          if   (access(TABLE,4)!=0)   usage();   
          if   (source==NULL)   usage();   
          if   (strlen(source)==0)   usage();   
          fp=fopen(source,"r");   
          if   (fp==NULL)   usage();   
          convert(fp);   
          fclose(fp);   
          fflush(stdout);   
          fclose(stdout);   
      }   
        
      void   convert(FILE   *fp)   
      {   
          FILE   *table;   
          int   c,x;   
          long   address;   
          table=fopen(TABLE,"r");   
          do   {   
              c=fgetc(fp);   
              if   (c>=0xA0)   {   
                  x=fgetc(fp);   
                  address=((c-0xA0)*510)+(x-1)*2;   
                  fseek(table,address,SEEK_SET);   
                  c=fgetc(table);   x=fgetc(table);   
                  if   (c!=0&&x!=0)   fprintf(stdout,"%c%c",c,x);   
              }   else   
              if   (c!=EOF)   fputc(c,stdout);   
          }   while   (c!=EOF);   
          fclose(table);   
      }   
        
            对照码表   
            这种方法的原理是,把所有的汉字的内码通过变量或者一定的规则仔细定义好,然后据表查询即可,譬如“国”的简体内码是$B9FA,繁体内码是$B0EA,建立一个变脸表,一个存储所有简体汉字,一个存储所有繁体汉字,一一对应,马上就出来了     
      3、对照表法   
            对照表法应该是最实用最简单的简繁转换方式了,这个方法和对照码表方式差不多,区别在于对照码表法用内码,此方法直接用汉字显示, 同一个文件或不同文件里面存储简体和繁体的对照表,这个方法的最大好处是照顾行文习惯,这是所有国家化软件必须的方法,譬如   
      服务器   -   伺服器   
      文件   -   檔案   
      ......   
      这种方式最大的麻烦是找一个好的对照表,很多公开代码的浏览器包括了这些,Linux下也包括了,当然一些好的对照表可以自己去维护   
      4、mlang方法   
            这种方法其实就是利用IE的API函数ConvertString,只是要自己定义而已,函数定义为   
      HRESULT   ConvertString(   
              DWORD   *pdwMode,   
              DWORD   dwSrcEncoding,   
              DWORD   dwDstEncoding,   
              BYTE   *pSrcStr,   
              UINT   *pcSrcSize,   
              BYTE   *pDstStr,   
              UINT   *pcDstSize   
      );   
      具体可以去查MSDN     
      以上一共介绍了4种方法,细分来总共是5种方法。    
      还有一种方法就是利用标准Unicode码表去查,这个码表是MS制作的,也就形成了标准。这个是根据MS的GBK字库制作的   
      譬如“國”在简体码表库中的编码是$87F8,那么根据码表查出其Unicode码是$570B,然后根据Unicode码$570B到繁体码表库中查到繁体内码是$B0EA,问题就解决了,这个码表库可以到ftp://ftp.unicode.org/Public/MAPPINGS/去下载。936是简体,950是繁体   
      当然,还有更多分方法,譬如Access转换法,SQL转换法,但基本原理无外乎以上的几种方法。