请问 GB 13000 UCS-2 是什么格式的文件?

neeme 2008-06-20 06:20:46
文字信息采用GB 13000的UCS-2进行存储,各项目分配如下:

项目 长度(字节) 说明
姓名 30 汉字
性别 2 代码
民族 4 代码
出生 16 年月日:YYYYMMDD
住址 70 汉字和数字
公民身份号码 36 数字
签发机关 30 汉字
有效期起始日期 16 年月日:YYYYMMDD
有效期截止日期 16 年月日:YYYYMMDD有效期为长期时存储“长期”
最新住址 70 汉字和数字


要把文件里的各段内容读入 AnsiString name,sex,......
请问各位大侠怎样做呢? 是否要用TFile?谢谢!
...全文
758 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
UCS-2应该用 wchar_t 和 WideString
不能直接用 char 和 AnsiString,要用也得通过 wchar_t 和 WideString 转
  • 打赏
  • 举报
回复
以前回复过一个完全相同的帖子,现在再重复回答一遍,假设文件头采用标准UCS2格式的两个字节,每个字段的数据是通过\t分隔的,每行文字是一条记录,如果有不同,需要对程序进行调整。

FILE *f = _wfopen(L"d:\\文件名.txt",L"rb");
if(f) // 打开文件成功
{
unsigned char hdr[2];
fread(hdr, 1, 2, f); // 读 UCS2 UNICODE 文本文件头2个字节
if(hdr[0]==0xff && hdr[1]==0xfe) // 是 UCS2 UNICODE 文本文件
{
wchar_t wsLine[1024];
std::vector<WideString>fds;

while(fgetws(wsLine, 1024, f)) // 按行读取
{
fds.clear();
wchar_t *p,*s = wsLine;
for(p=s; *p; p++)
{
if(*p==L'\t')
{
*p = 0;
fds.push_back(s);
s = p+1;
}
else if(*p==L'\r' || *p==L'\n') // 行末
{
*p = 0;
fds.push_back(s);
s = p;
break;
}
}
if(*s) // 最后一行可能没有回车,这里判断一下
{
fds.push_back(s);
}

int nCount = fds.size(); // 这一行一共有的字段个数
for(int i=0; i<nCount; i++)
{
WideString ws = fds[i]; // 这一行的第 i 个字段的值
}
}
}
else
{
MessageBoxW(Handle, L"不是 UCS2 UNICODE 文本文件",L"读文件错误",MB_OK|MB_ICONSTOP);
}
fclose(f);
}
else
{
MessageBoxW(Handle, L"打开文件失败",L"读文件错误",MB_OK|MB_ICONSTOP);
}
jacknes009 2008-06-21
  • 打赏
  • 举报
回复
unicode编码。

WideString
我来看看CB 2008-06-21
  • 打赏
  • 举报
回复
struct
{
char name[30];
....
}
neeme 2008-06-21
  • 打赏
  • 举报
回复
请问可否解释一下呢, 小弟不明白.

[Quote=引用 2 楼 dxkh 的回复:]
struct
{
char name[30];
....
}
[/Quote]
  • 打赏
  • 举报
回复
UCS-2 好像就是unicode编码。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧