Net-Base Iris

19.04.2026

Aistriú chuig Unicode i sean-thionscadail Delphi: constaicí, straitéis agus cur i bhfeidhm glan

Oibríonn go leor Delphi-feidhmchláir oidhreachta fós le sreanga ANSI. Is i bhfad níos mó ná lasc sa chomhdhéanóir é aistriú go Unicode: bainfidh sé le rochtain sonraí, comhéadan, tuarascálacha, leabharlanna tríú pháirtí agus tástálacha. Taispeánann an t-alt seo cosán aistrithe praiticiúil – lena n-áirítear...

19.04.2026

Tá an Inimirce Unicode de thionscadail sean-Delphi riachtanach i go leor comhlachtaí, toisc nach n-oibreoidh aipeanna seanbhunaithe i gceart le sonraí idirnáisiúnta, córais oibriúcháin nua, chomhtháthuithe agus comhéadan nua mura ndéantar an t-aistriú. Sa chleachtas ní bhíonn sé de ghnáth mar „athchomhbhrú agus réidh“. Ó na leaganacha Unicode (ó Delphi 2009 ar aghaidh) tá athruithe bunúsacha déanta ar na cineálacha String caighdeánacha. Mar sin athraítear tuairimí faoi chódúchán carachtair, leagan úsáideach cuimhne agus sínithe API. Má dhéanann céatadán túese sin a mhaolmholmhú, cruthaíonn sé earráidí sonraí i bhfad i gcéin, onnmhairiú briste, cásanna tacaíochta neamhréireacha agus rioscaí slándála.

Soláthraíonn an t-alt seo cur chuige faoi fhrithchtéineolaíocht: conas an sean-bhunachar a anailísiú, scóip a ghearradh go héifeachtúil, rioscaí a laghdú i bpointí teasa (bunachair shonraí, comhaid, APIs Windows, COM, seirbhísí REST) agus an inimirce a dhaingniú ionas go mbeidh oibriú agus forbairt in ann leanúint ar aghaidh go comhthreomhar. Tá an fócas ar ghreannáin tipiciúla Delphi i n-iarratais VCL, i seirbhísí agus i gcomhéadanacha – le súil ar shainebhealaí nuaúcháin ina bhféadfar ábhar mar [ [NBML_TERM_8_901e2bf2]]-Ablösung, REST-Server nó il-thláimhseáil a chur san áireamh níos déanaí.

Cén fáth go mbíonn an t-aistriú Unicode i Delphi “níos mó ná mar a cheapadh”

I leaganacha clasaiceach Delphi bhí string ina ANSI-String (ag brath ar an system codepage). Ó Delphi 2009 ar aghaidh tá string de réir réamhshocraithe mar UnicodeString (UTF-16). Ag an am céanna cuireadh go leor leabharlanna agus ranganna VCL ar APIanna Wide. Tá sé seo dearfach ó thaobh mar go dtacaíonn sé le carachtair idirnáisiúnta go láidir. Ach: tá cód legacy forbartha thar na blianta faoi na glacaimh „1 char = 1 byte“, „PChar is PAnsiChar“ nó „Length() léiríonn líon bytaí“.

Na cúiseanna tipiciúla a dhéanann an inimirce níos casta ná mar a cheaptar:

  • Aistrithe intuigthe tagann siad i dtír ach athraíonn siad sonraí (go háirithe do chomhaid, comhéadanacha nó réimsí BLOB/Text i mbunachair shonraí).
  • Cód bunaithe ar bhaite (Streams, Buffer, Hashing, criptú) déanann botún leitneach gan an t-aire má tháinig ábhar String a léiriú mar bhaite.
  • Comhpháirteanna tríú páirtí bíonn siad uaireanta ANSI-only, nó úsáideann siad cineálacha String agus callbacks féin.
  • Timpeallacht seachtrach (APIs Windows, COM, priontáil/Reporting, EDI, CSV, XML/JSON) a fhéachann le códúcháin shonracha.

Níor chóir go mbeadh an sprioc ná “an oiread is féidir a cheartú”, ach athrú beartaithe go díreach áit a gcaithfidh sreafaí sonraí agus códúcháin a bheith sainithe. Is deis í inimirce Unicode shlán freisin i dtaobh teorainneacha códúcháin a dhoiciméadú agus a thástáil.

Bunghnéithe teicniúla: cineálacha String i Delphi, códúcháin agus a n-iarrachtaí

string, UnicodeString, AnsiString, WideString – cad a bhíonn tábhachtach sa tionscadal

Don inimirce tá sé ríthábhachtach cén cineál atá in úsáid ag comhéadanacha agus i ngnáthfheidhmeanna lárnacha:

  • string: Ó Delphi 2009 ar aghaidh is UnicodeString é (UTF-16, reference-counted, seasmhachtaí neamhionramhála thar Copy-on-Write).
  • AnsiString: String bunaithe ar bhaite le codepage ceangailte (ag brath ar leagan Delphi is féidir go mbíonn codepage stóráilte). Oiriúnach nuair atá comhéadan seachtrach ag éileamh códúcháin 8-bhairte shonraithe.
  • UTF8String: I leaganacha níos nua-aimseartha Delphi go minic mar Alias/AnsiString le codepage UTF-8; praiticiúil do REST/JSON agus do go leor prótacail.
  • WideString: BSTR (COM), bainistithe tríd SysAllocString; inniu déantar é a úsáid de ghnáth ach don idirobair COM áirithe.
  • PChar: Tar éis Unicode-Delphi is PWideChar é. Seo ceann de na pointí briste is coitianta le glaonna API Windows.

Má mheascann tú na cineálacha seo, cruthaítear aistrithe. Tá cuid acu ceart, cuid eile iontasach: níl aistriú ceart ach má tá a fhios agat cén codepage atá san fhoinse agus cén ceann a bhfuiltear ag súil leis sa sprioc.

UTF-16 istigh, UTF-8 amuigh: réamhghníomh cleachtaisfhéileacánach

I n-iarratais VCL Delphi bíonn sé minic praiticiúil oibriú go comhsheasmhach le string (UTF-16) go hinmheánach. Go seachtrach (REST, comhaid, teachtaireachtaí) is minic atá UTF-8 in úsáid i ndáiríre. Mar sin moltar an líne chruinn seo:

  • Istigh: string/UnicodeString mar staidéar réamhshocraithe.
  • Teorainneacha: ag iontráil/amach aistriú go soiléir leis TEncoding.UTF8 (nó le codepages ANSI shonraithe).
  • Próiseáil bhunaithe ar bhaite: TBytes in ionad Strings.

Laghdóidh sé sin aistrithe intuigthe agus déanfaidh sé freagrachtaí tástáilte: “Cá ndéantar Baite a dhéanamh ina Téacs, agus cén códúchán?”

Staidéar ar an stoc: cá mbraitheann Unicode i sean-thionscadail Delphi

Sula gcuirfidh tú lámh ar an gcód, tá sé fiúntach iniúchadh struchtúrtha a dhéanamh. I inimirce Unicode ar thionscadail sean-Delphi ní bhíonn na foinsí earráidí cothromaithe; tá siad tiomnaithe do roinnt pointí teasa.

1) Rochtain ar bhunachar sonraí agus cineálacha réimsí (BDE, ADO, FireDAC)

Úsáidtear go leor tionscadal seanbhunaithe fós BDE nó sraitheanna rochtana sonraí níos sine. Is iad na fadhbanna coitianta:

  • Meaitseáil charsets an bhunachar sonraí le Strings Delphi (ANSI vs cineálacha réimse Unicode).
  • “Téacs” i mbloig BLOB nó réimsí Memo gan códúchán sainithe.
  • Ráitis SQL mar Strings, a léitear go difriúil le haghaidh umlauts/carachtair Unicode.

Má tá athnuachan beartaithe cheana féin is féidir inimirce Unicode a chomhcheangal go maith le glanadh rochtana sonraí, mar shampla i dtreo BDE-Ablosung mit nativer Anbindung agus cumraíocht charsets shoiléir (mar atá i PostgreSQL nó MariaDB). Tábhachtach: ní chiallaíonn inimirce go gcaithfear bunachar sonraí a athlonnú go huathoibríoch; ach caithfidh an comhéadan idir an DB agus Delphi a bheith soiléir.

2) I/O comhad agus sreabhán: CSV, INI, formáidí propraítiúla, Iompórt/Onnmhairiú

Clasaiceach é: léiríodh comhaid roimhe sin le AssignFile/ReadLn, TFileStreamTStringList.LoadFromFile gan códúchán a shonrú. I Unicode-Delphi roghnaíonn an córas ansin go heuristiciúil (BOM) nó úsáideann sé réamhshocruithe. Bíonn sé seo mar chúis leis:

  • Umlauts a léirmhíniú go mícheart (ä, ö) i CSV/Logfiles,
  • neamh-chruinneas i méideanna i bhformáidí propraítiúla,
  • míchomhoiriúnachtaí le comhpháirtithe seachtracha a d’éilíonn ISO-8859-1 nó Windows-1252.

Réiteach glan ná códúchán seasta a shocrú do gach formáid comhaid agus é a chur i gcód agus i ndoiciméadú. Do CSV/JSON is minic go bhfuil UTF-8 an chaighdeán ceart, do shean-chomhéadain uaireanta Windows-1252. Tá an soiléireacht cinntitheach.

3) API Windows, PChar, méid buifa, láimhseáil teachtaireachtaí

Glaonn go leor iarratais Delphi ar fheidhmeanna WinAPI nó oibríonn siad le buifaí. Pointí briste coitianta:

  • Úsáid PChar i dteannta feidhmeanna a bhfuil leagananna ANSI nó Wide acu (…A/…W).
  • Méadain buifa i mBhaite a ríomh, ach is é an Char i UTF-16 ná 2 bytes.
  • Aithris pointeoirí agus leaganacha Record atá bunaithe ar char 1-bhainte.

Ní mór athshocrú cruinn: nó bain úsáid go comhsheasmhach as Wide-APIanna nó glaonna an leagan ANSI go ceanúil agus oibrigh le AnsiString/Codepage. “Ritheann sé ar bhealach ar bith” níl sé mar tháscaire cáilíochta.

4) COM, ActiveX, Office-Automation agus leabharlanna tríú páirtí

Oibríonn comhéadanacha COM minic le BSTR (WideString). Bhí réamhshocruithe String i leaganacha sean-Delphi difriúil, agus mar sin d’fhéadfadh cód a oibriú “go randamach”. I Unicode-Delphi tarlaíonn aistrithe dúbailte nó tuairimí cineálaí mícheart i wrappers. Tá leabharlanna tríú páirtí íogair freisin: tugann cuid callbacks mar PAnsiChar, cuid eile ag súil le Strings byte-níotanta.

Is fiú spleáchais a rangú anseo: cé acu leabharlann atá Unicode-ready, cé nach bhfuil agus cé acu is féidir a athsholáthar nó a chisealú? Bíonn cisealú de ghnáth an bealach is tapa chun cur le seanfheidhmeanna Unicode i limistéar soiléir théarnaiste.

Straitéis: Inimirce Unicode de shean-Delphi mar chlár nuaúcháin rialaithe

Is é an cur chuige is sábháilte don inimirce ná clár ilchéimeach a dhéanann rioscaí le feiceáil go luath agus a choinníonn an t-iarratas ag rith le linn an athraithe.

Céim 1: Scóip a shainiú agus na Hotspots cód a chur ar thosaíocht

Ní gá gach foinsí a mhodhnú láithreach. Socraigh tosaíochtaí bunaithe ar sreafa sonraí agus riosca:

  • Comhéadanacha amach (APIs REST, TCP/IP, comhaid, ríomhphoist, priontáil/Reporting).
  • Rochtain sonraí (SQL, ORM/Datamodule, BDE/FireDAC-sraitheanna).
  • Feidhmeanna ilghreannacha String (Parser, Formatter, Encoder/Decoder).
  • Comhtháthuithe (COM, iontrálacha DLL, ceangailtí crua-earraí).

Ba chóir go mbeadh toradh liosta ina leith ina bhfuil “códúchán mar shonra”. Déanfar na háiteanna seo inrochtana le tástáil níos déanaí.

Céim 2: Roghanna comhdaitheora/proicéad agus rabhaidh a shocrú go feasach

I go leor tionscadal cuireadh rabhaidh as gníomh thar na blianta. Tá sé friththáirgiúil don inimirce Unicode. Moltar rabhaidh a chumasú arís agus tabhairt aire dá gcuid aistrithe. Cabhraíonn sé freisin rialacha tionscadail a shocrú, mar shampla: gan aistrithe intuigthe AnsiString ag teorainneacha I/O, úsáid TEncoding do oibríochtaí comhaid, gan “cleasanna PChar” gan comhthéacs soiléir.

Céim 3: Teorainneacha “Encoding” a tharraingt mar shraith theicniúil

Is straitéis a oibríonn go maith ná adapters/helps beag a chur isteach a shonraíonn go cruinn conas a thagann agus a théann sonraí seachtracha. Samplaí:

  • CSV-Reader/-Writer: i gcónaí le TEncoding.UTF8 (nó codepage shonraithe) agus rialacha scoiltóirí soiléire.
  • Cliant/Server REST: JSON i gcónaí mar bhaite UTF-8, sirréidce sonraí ceart a shocrú, gan sruthlú an Body mar “string” díreach.
  • API-Wrapper Windows: feidhmeanna lárnacha a chisealú a dhéanann Wide/Ansi a chóiriú go néata.

Mar sin seachnaíonn tú a bheith ag cinntiú cinntí códúcháin ar fud na bonnchódála.

Poill chód tipiciúla agus conas iad a shocrú go glan

Length, SizeOf, ByteLength: nuair a bhriseann fad carachtair agus méid bytaí ó chéile

I ré na ANSI úsáidtear Length(s) go minic mar líon bytaí. I UTF-16 níl sé sin ceart. Má tá gaol agat le haireannacha byte, déan aistriú go soiléir:

  • Do UTF-8: TEncoding.UTF8.GetBytes(s)
  • Do codepage ANSI sainithe: TEncoding.GetEncoding(1252).GetBytes(s) (nó amháin má tá sé ceart ó thaobh na gnó)

Do mhéideanna buifa i nglaonna API: seiceáil an bhfuil an fheidhm ag súil le haonaid char nó aonaid byte. Tá an doiciméadú agus sínithe níos tábhachtaí ná intinn.

PAnsiChar vs. PWideChar: Iompórtálacha DLL agus prótacail seachtracha

Le hIompórtálacha DLL tá an baol mór nach mbeidh na sínithe sa chód Delphi ag teacht leis an méid atá ag teastáil. Sainiú a dhéanamh ar cad atá ag teastáil ón DLL:

  • An bhfuil an DLL ag súil le UTF-8? Ansin is coitianta é a chur mar PAnsiChar(UTF8String), ach caithfidh tú saolré agus teorannú null a rialú.
  • An bhfuil sí ag súil le UTF-16? Ansin bain úsáid as PWideChar agus Wide-Strings.

Sna cásanna go léir ba chóir na Iompórtálacha a chisealú i aon aonaid (unit) ar leith ionas nach scaipfidh polasaí String tríd an tionscadal iomlán.

Formáidiú, cas-chomhshó, comparáid: Locale agus gnáthú

Cuireann Unicode ábhair shíomptómacha leis freisin: níl an chású/ócshúlú simplí i ngach teanga, agus d’fhéadfadh carachtair a bheith i bhfoirmeacha gnáthaithe éagsúla. I bhfeidhmchláir fiontraíochta is eol nach bhfuil sé chomh criticiúil agus i dtáirgeadh téacs tomhaltóra, ach tiontaíonn sé ar:

  • Sórtáil agus scagadh (m.sh. i ngráidanna nó feidhmeanna cuardaigh),
  • Comparáidí gan cás do luachanna eochair,
  • Giniúint ainmneacha comhaid nó aitheantóirí.

Tábhachtach: rialacha soiléire a bheith agat faoi cad iad “eochracha” (m.sh. uimhir mhír, cód custaiméara) a bhfuil sé inmhianaithe a choinneáil gar do ASCII, agus cad iad “téacsanna” a gcaithfear a bheith lán-UIUnicode. Laghdaíonn an scaradh sin botúin leanúnacha.

GUI/Reporting: Clocha cló, priontáil, PDF agus iompar chomhpháirteanna

Ós rud é go bhfuil VCL Unicode-inchomhshóite ó na leaganacha sin, tá an chás iarbhír i mbéal comhlántacht chomhpháirteanna agus bealaí aschuir. Bíonn rioscaí ann le:

  • innill report níos seanbhunaithe nó gineadóirí PDF a ghlacann ANSI,
  • priontáil barcode/label a éilíonn codepages ar leith,
  • clótha go do-ghonta nó tacair charachtair greamaithe i gcód.

Pleanáil tástálacha luath le sonraí samplacha réadacha (ainmneacha, suímh, carachtair speisialta, scríbhinní neamh-latainigh más ábhartha). Ní leor “tá sé in ann Unicode” — is é an t-idirbheart atá tábhachtach: “Tá an aschur seo ceart i gcomhthéacs an chórais.”

Sonraí agus buanathrú: Ní chríochnaíonn Unicode leis an gcód amháin

Charsetanna agus Collations i mbunachair shonraí a shocrú go cruinn

Ní bheidh inimirce Unicode seasmhach mura bhfuil bunachair shonraí agus tiománaithe cumraithe i gceart. Samplaí:

  • I PostgreSQL is minic gurb é UTF-8 an réamhshocrú; fós féin ní mór Client-Encoding agus iompar tiománaí a sheiceáil.
  • I SQL Server tá an difríocht idir VARCHAR agus NVARCHAR ríthábhachtach; d’fhéadfadh rogha colúin mícheart carachtair a chailleadh.
  • I MariaDB/MySQL tá Charset/Collation (m.sh. utf8mb4) ríthábhachtach ionas nach n-ábhar 4-bhailte a ghearrtar as.

Sna códanna Delphi ba chóir paraiméadair agus cineálacha réimse a úsáid ar bhealach nach ndéanann Unicode a athchódú ar ais ar an mbealach. De ghnáth soláthraíonn FireDAC smacht níos fearr ná sraitheanna rochtana an-ársa.

Formáidí comhaid legacy: rialacha inimirce seachas aistriú ciúin

Má tá do fheidhmchlár ag giniúint comhaid thar na blianta (formáidí onnmhairiúcháin, comhaid chartlainne, struchtúir propraítiúla), caithfidh tú a shainiú:

  • Cé na comhaid stoc a fanfaidh “mar atá” agus a léifear i gceart nuair a léifear iad?
  • Cé na formáidí a ardófar go UTF-8?
  • An bhfuil réimsí leagan/teidil i gceist chun comhaid nua agus sean a aithint go soiléir?

Ní mholtar aistriú ciúin gan lipéadú toisc go mbíonn earráidí le feiceáil déanach. Níos fearr: leaganú, aithint shoiléir, inimirce spriocdhírithe.

Assurance cáilíochta: tástálacha a aimsíonn fadhbanna Unicode go fírinneach

Bíonn earráidí Unicode minic faoi réir sonraí. Dá bhrí sin ní leor tástálacha “Happy Path”. Moltar tacar tástála a chlúdaíonn na pointí fhadhbacha:

  • Tástálacha Roundtrip: Iompórtáil → Próiseáil → Onnmhairiú, ansin comóradh byte-chruinn (do fhormáidí sainithe).
  • DB-Roundtrip: Scríobh/Léigh téacsanna le umlauts, béimsiú agus, más ábhartha, carachtair neamh-latainigh; seiceáil comhionannas.
  • Sanaí-Tests Comhéadan: Iarrataí REST mar UTF-8, ceanntáscanna, JSON-Escaping, logging.
  • Regressión: Sonraí sean agus cásanna úsáideora tipiciúla a athchruthú, go háirithe i gcuardach, scagadh agus sórtáil.

Do chórais B2B tá sé tábhachtach go dtiocfadh earráidí le feiceáil: níor chóir logging a scriosadh le códúchán. Má scríobhtar logs mar ANSI caillfear an t-eolas atá uait i gcás earráide.

Pleanáil agus iarracht: cad a thiomáineann an chasta i ndáiríre

Ní bhíonn iarracht inimirce Unicode i sean-Delphi ag brath chomh mór ar “líneacha cód” ach ar cheangail agus ar spleáchais seachtracha:

  • Iolradaí comhtháthuithe (DLLs, COM, gléasanna, ERP/DMS/CRM) méadaíonn an scrúdú mar go bhfuil códúcháin tábhachtach ag gach teorainn.
  • Formáidí stairiúla (onnmhairiúcháin sean, CSV custaiméara) a éilíonn rialacha inimirce agus straitéis comhoiriúnachta.
  • Meascán leaganacha Delphi nó roinnt táirgí ó bhreischód a dhéanann ualach comhoibrithe níos mó.
  • Sraitheanna rochtana sonraí sean (m.sh. BDE) a d’fhéadfadh Unicode a bhacadh go hindíreach agus a spreagann nuachóiriú.

I gcleachtas cruthaíodh go n-oibríonn cur chuige a dhéanann Unicode stabailte sa chroí agus sna sreafaí sonraí is criticiúla den chéad, ansin modúil a chur i ngluaisrothar de réir a chéile. Laghdaíonn sé seo an riosca agus seachnaíonn sé réimseanna fada “Big Bang” gan scaoileadh.

Cuir san áireamh i mbealaí nua-úirsithe: REST, seirbhísí, il-thláimhseáil

Is minic gurb é Unicode bonn tábhachtach má tá sé beartaithe bogearraí seanbhunaithe a nua-úrsithe. Ceisteanna nascacha tipiciúla:

  • REST-Server nó API REST a chur leis (JSON/UTF-8 a láimhseáil go glan).
  • Seirbhísí Windows nó Linux-Services a oibriú go cobhsaí (logging, comhaid chumraíochta, prótacail).
  • Nuaúirseáil UI i VCL de réir céime, agus ina dhiaidh sin cliaint il-thláimhseála féideartha.

Tábhachtach ná an ord: sula dtógann tú comhéadanacha nua ba chóir rialacha códúcháin a shocrú. Déanamh inimirce Unicode “ar an taobh” le linn forbartha comhéadanacha cruthaíonn patrúin earráide deacra a thástáil, toisc go measctar cúis agus éifeacht.

Do nasc inmheánach sa mhagazin moltar ábhair chríochacha mar nua-úrsú Delphi, rochtain sonraí FireDAC nó ailt ar ailtireacht freastalaithe REST a chur ar fáil ionas go bhféadfadh léitheoirí dul go dtí an chéim theicniúil seo chugainn go dírithe.

Conclúid: Is ábhar riosca é inimirce Unicode — le modh ceart déantar é a phleanáil

Ní haon uasghrádú cosmaideach é inimirce Unicode de shean-Delphi; is ceartú é ar ghlacaimh bhunúsacha maidir le téacs, baite agus comhéadanacha. Má théann tú i ngleic leis de réir struchtúrtha, faigheann tú níos mó ná “go n-oibríonn na Umlauts arís”: éiríonn sreafaí sonraí níos soiléire, éiríonn comhtháthuithe níos láidre, agus éiríonn an nua-úrsú ina dhiaidh sin (m.sh. freastalaithe REST, seirbhísí, glanadh bunachar sonraí) níos éasca toisc nach dtarlaíonn códúcháin go hiondúil „amháin áit éigin“.

Mura leor duit plean inimirce sonraíoch do d’iarratas Delphi, anailís riosca ar na Hotspots nó tacaíocht don chur i bhfeidhm, is é an chéad chéim is gasta comhrá teicniúil tosaigh faoi do choinníollacha agus do spleáchais: Déan teagmháil.

I gcomhthéacs proifisiúnta, tá ról tábhachtach ag Delphi Unicode Migration agus Delphi Ansi Zu Unicode nuair is gá go n-oibreoidh comhtháthuithe, sreafaí sonraí agus forásais le chéile go soiléir.

Pléigh tionscadal nó tionscnamh nua-úirsithe le Net-Base.

Roinn an post

Roinn an t-alt seo go díreach

Tá LinkedIn, X, XING, Facebook, WhatsApp agus ríomhphost ar fáil láithreach. Do Instagram ullmhaímid nasc agus téacs gairid láithreach.

Ríomhphost

Osclaítear Instagram i gcluaisín nua. Cóipeáiltear an nasc agus an téacs gairid roimh ré isteach sa ghearrthaisce.