PageSourceSearch

https://www.aitoolsite.top/_next/static/chunks/pages/humanize/humanizer-9c277c66399120ca.js

js aitoolsite.top collected 2026-10-02 02:09:12 UTC 18,161 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6742],{39433:function(e,t,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/humanize/humanizer",function(){return s(39104)}])},84470:function(e,t,s){"use strict";s.d(t,{Z:function(){return i}});var n=s(41844);function i(e){let{onClose:t}=e;return(0,n.jsxs)("div",{class:"relative z-10","aria-labelledby":"modal-title",role:"dialog","aria-modal":"true",children:[(0,n.jsx)("div",{class:"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"}),(0,n.jsx)("div",{class:"fixed inset-0 z-10 w-screen overflow-y-auto",children:(0,n.jsx)("div",{class:"flex min-h-full items-center justify-center p-4 text-center",children:(0,n.jsxs)("div",{class:"relative transform overflow-hidden rounded-lg bg-white text-left shadow-xl transition-all",children:[(0,n.jsxs)("div",{class:"bg-white px-4 pt-5",children:[(0,n.jsxs)("div",{class:"flex items-center",children:[(0,n.jsx)("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-red-100",children:(0,n.jsx)("svg",{class:"h-3 w-3 text-red-600",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true",children:(0,n.jsx)("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"})})}),(0,n.jsx)("h3",{class:"text-base font-semibold leading-6 text-gray-900 ml-2",id:"modal-title",children:"Permission error"})]}),(0,n.jsxs)("div",{class:"mt-2",children:[(0,n.jsx)("p",{class:"text-sm text-gray-900 mb-1",children:"This may be caused by logging in to multiple Google accounts. Follow these steps to resolve the issue:"}),(0,n.jsx)("p",{class:"text-sm text-gray-700",children:'1. Click on the avatar in the upper right corner (as shown below), and then select "Sign out of all accounts".'}),(0,n.jsx)("img",{src:"https://space-walk.oss-us-west-1.aliyuncs.com/sign-out.png",alt:"sign out",style:{width:"70%"}}),(0,n.jsx)("p",{class:"text-sm text-gray-700",children:"2. Log in to your Google account again."}),(0,n.jsx)("p",{class:"text-sm text-gray-700",children:"3. Reuse add-on."})]})]}),(0,n.jsx)("div",{class:"bg-gray-50 px-4 py-3",children:(0,n.jsx)("button",{type:"button",class:"mt-3 inline-flex w-full justify-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50 sm:mt-0 sm:w-auto",onClick:()=>t(),children:"I know"})})]})})})]})}},10913:function(e,t,s){"use strict";s.d(t,{Z:function(){return d}});var n=s(41844),i=s(55784),l=s(74627),r=s(71577),a=s(21687),o=s(39398),c=s(33044);function d(e){let{appName:t,user:s,usage:d,limitMonthUsage:u,unit:h,loginError:p,freeUseTimes:x,onUpgrade:m}=e,[g,f]=(0,i.useState)(""),[v,j]=(0,i.useState)("Pro");return(0,i.useEffect)(()=>{(0,c.Nh)("addon").then(e=>{f(e)})},[]),(0,i.useEffect)(()=>{let e="Pro";s&&("premium"===s.subscriptionType?e="Premium":"unlimited"===s.subscriptionType&&(e="Unlimited")),j(e)},[s]),(0,n.jsx)("div",{className:"px-2 py-2 bg-white flex items-center justify-between border-b border-slate-200",children:s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.Z,{content:(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"text-sm font-medium text-gray-700",children:s.name}),(0,n.jsx)("p",{className:"text-xs font-medium text-gray-500",children:s.email}),"active"===s.subscriptionStatus&&(0,n.jsx)("a",{className:"mt-1 text-xs font-medium text-gray-500 hover:text-blue-500",href:`https://www.aitoolsite.top/${t}/unsubscribe?token=${g}`,target:"_blank",children:"Unsubscribe or Refund"}),(0,n.jsxs)("p",{className:"mt-1 text-xs font-medium text-gray-500",children:["Contact us: ",(0,n.jsx)("a",{className:"text-blue-600 hover:text-blue-500 inline-block",href:"mailto:[email protected]",target:"_blank",children:"[email protected]"})]})]}),placement:"bottomLeft",children:(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("img",{className:"inline-block h-9 w-9 rounded-full",src:s.photo,alt:"user photo"}),(0,n.jsx)(o.Z,{})]})}),(0,n.jsx)("div",{className:"ml-2 flex items-center",children:"active"===s.subscriptionStatus?(0,n.jsxs)("div",{children:[(0,n.jsxs)("span",{className:"block text-sm font-medium text-gray-500",children:["Current plan: ",(0,n.jsx)("span",{className:"text-gray-700",children:v})]}),u&&(0,n.jsxs)("span",{className:"block text-xs font-medium text-gray-500",children:["Usage: ",(0,n.jsxs)("span",{className:"text-gray-700",children:[d," / ",u," ",h||"times"]})]})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{children:[(0,n.jsxs)("span",{className:"block text-sm font-medium text-gray-500",children:["Current plan: ",(0,n.jsx)("span",{className:"text-gray-700",children:"Free"})]}),(0,n.jsxs)("span",{className:"block text-xs font-medium text-gray-500",children:["Usage: ",(0,n.jsxs)("span",{className:"text-gray-700",children:[d," / ",x," ",h||"times"]})]})]}),(0,n.jsx)(r.ZP,{className:"ml-3 bg-blue-600 hover:bg-blue-500",type:"primary",size:"small",onClick:()=>m(),children:"Upgrade"})]})})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.Z.Avatar,{active:!0,size:"default",shape:"circle"}),(0,n.jsx)("div",{className:"ml-2",children:(0,n.jsx)(a.Z.Input,{active:!0,size:"default",shape:"square"})})]})})}},96681:function(e,t,s){"use strict";s.d(t,{DP:function(){return n},LK:function(){return i},Lv:function(){return l}});let n=e=>new Promise((t,s)=>{let n=new FormData;n.append("file",e);let i=new XMLHttpRequest;i.onload=()=>{let e=JSON.parse(i.responseText);t(e)},i.onerror=e=>{s(e)},i.open("POST","https://api.moonshot.cn/v1/files"),i.setRequestHeader("Authorization","Bearer sk-Ke8VpMvhdojbvEr3EA08FTGdhUYtTcWU848k9eyYx20efQng"),i.send(n)}),i=e=>new Promise((t,s)=>{let n=new XMLHttpRequest;n.onload=()=>{let e=JSON.parse(n.responseText);t(e)},n.onerror=e=>{s(e)},n.open("GET",`https://api.moonshot.cn/v1/files/${e}/content`),n.setRequestHeader("Authorization","Bearer sk-Ke8VpMvhdojbvEr3EA08FTGdhUYtTcWU848k9eyYx20efQng"),n.send()}),l=e=>new Promise((t,s)=>{let n=new XMLHttpRequest;n.onload=()=>{t()},n.onerror=e=>{s(e)},n.open("DELETE",`https://api.moonshot.cn/v1/files/${e}`),n.setRequestHeader("Authorization","Bearer sk-Ke8VpMvhdojbvEr3EA08FTGdhUYtTcWU848k9eyYx20efQng"),n.send()})},39104:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return T}});var n=s(41844),i=s(11163),l=s(4298),r=s.n(l),a=s(9008),o=s.n(a),c=s(55784),d=s(71956),u=s(13780),h=s(33044),p=s(96681),x=s(35238),m=s(85465),g=s(79415),f=s(58301),v=s(75081),j=s(71577),y=(s(47153),s(434),s(12069)),b=s(6171),w=s(28849),N=(s(10913),s(60119)),k=s(60321),P=s(84470);let{TextArea:S}=g.Z,C=s(89479),Z="humanize",z=!1;function T(){let e=d.hO[Z],t=(0,i.useRouter)(),{state:s}=t.query,{user:l,usage:a,logining:g,subscripting:T,permissionError:E,loginError:H,updateUser:F,canUse:I,openPricingPage:L,updateUserUsage:U,updateUserUsageByPoints:_}=(0,h.ZP)(Z,"web"),[A,O]=(0,c.useState)(!1),[M,R]=(0,c.useState)("docs"),[q,B]=(0,c.useState)(!1),[D,G]=(0,c.useState)(1),[J,W]=(0,c.useState)(""),[Y,K]=(0,c.useState)(!1),[X,$]=(0,c.useState)(!1),[Q,V]=(0,c.useState)(""),[ee,et]=(0,c.useState)(""),[es,en]=(0,c.useState)(!1),[ei,el]=(0,c.useState)(!1),[er,ea]=(0,c.useState)([]),[eo,ec]=(0,c.useState)(!1),[ed,eu]=(0,c.useState)(!1),[eh,ep]=(0,c.useState)(!1),[ex,em]=(0,c.useState)(!1),[eg,ef]=(0,c.useState)(3e4);(0,c.useEffect)(()=>{"undefined"!=typeof google&&google.script&&google.script.run&&google.script.run.withFailureHandler(e=>{}).withSuccessHandler(e=>{console.log("getAddonHost",e),R(e)}).getAddonHost()},[]),(0,c.useEffect)(()=>
1{if(!X&&s){let e=(0,u.hP)(Z);e?z||(z=!0,ev()):(K(!1),$(!0))}},[t.query]),(0,c.useEffect)(()=>{l&&"active"===l.subscriptionStatus&&ef("premium"===l.subscriptionType?1e5:"unlimited"===l.subscriptionType?5e5:3e4)},[l]),(0,c.useEffect)(()=>{E&&O(!0)},[E]);let ev=async()=>{en(!0);try{let e=JSON.parse(s),t=(0,u.hP)(Z);if(!t)throw Error("No valid token found");let n=await (0,u.Gr)(e.ids[0],t.access_token),i=await (0,u.Hz)(e.ids[0],t.access_token),l=new File([n],i.name,{type:i.mimeType});ej(l)}catch(e){en(!1),f.ZP.error(e.message||e)}},ej=async e=>{en(!0);try{let t=await (0,p.DP)(e);console.log("uploadFileToMoonshot",t);let s=await (0,p.LK)(t.id);console.log("getFileContent",s),V(s.content),(0,p.Lv)(t.id)}catch(e){f.ZP.error("Failed to extract text from file")}finally{en(!1)}},ey=async e=>{{let t=await fetch("/api/humanize",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:e})}).then(e=>e.json());return 1==t.status?t.result:Promise.reject(t.message||"Failed to humanize text")}},eb=async()=>{let e=(0,x.Ht)(Q);if((!l||"active"!==l.subscriptionStatus)&&e>300){ep(!0);return}B(!0);try{let t=(0,x.PF)(Q,3e3);console.log("textChunks",t);let s=await Promise.all(t.map(e=>ey(e))),n=s.join("");et(n);let i=function(e,t){let s=C.diffWords(e,t),n=0,i=[];for(let e=0;e<s.length;e++){let t=s[e];if(t.removed&&s[e+1]&&s[e+1].added){let l=t.value,r=s[e+1].value,a=0;for(let t=e+2;t<s.length;t++){let n=s[t];if(!n||!n.added&&!n.removed&&n.value&&n.value.trim())break;n.added?(r+=n.value,e++):n.removed?(l+=n.value,e++,a+=n.value.length):" "==n.value&&(l+=n.value,r+=n.value,e++,a+=n.value.length)}let o={type:"replace",start:n,source:l,right:r};i.push(o),n+=t.value.length+a,e++}else if(t.added){let l="",r=s[e-1];if(r&&!r.removed){let e=r.value.split(" ");(l=e[e.length-1])||!e[e.length-2]||(l=e[e.length-2]+" ")}let a=l,o=t.value,c={type:"add",start:n-l.length,source:a,right:o};i.push(c)}else if(t.removed){let e=t.value,s={type:"remove",start:n,source:e,right:""};i.push(s),n+=t.value.length}else i.push({type:"origin",value:t.value}),n+=t.value.length}return i}(Q,n);console.log("changes",i),ea(i),f.ZP.success("Text humanized successfully!"),i.length&&(l?(_(e),(0,m.gT)({amount:e,description:"Humanize Drive",feature:"humanize_drive",expiredAt:(0,m.rj)(l)},"web",Z)):U(300,e))}catch(e){f.ZP.error(e.message||e)}finally{B(!1)}},ew=()=>{navigator.clipboard.writeText(ee),f.ZP.success("Copied to clipboard!")},eN=async()=>{if(a>=300){if(l){if("active"!==l.subscriptionStatus){eu(!0);return}}else{em(!0);return}}let e=3e4,t="30000";if(l&&("premium"===l.subscriptionType?(e=1e5,t="100000"):"unlimited"===l.subscriptionType&&(e=5e5,t="500000")),a>=e){f.ZP.error(`Monthly limit of ${t} words reached.`);return}eb()},ek=()=>{$(!1),Y?saveToGoogleDrive():(z=!0,ev())},eP=()=>{eu(!1),ep(!1),L(Z)},eS=()=>{l?eP():em(!0)},eC=async()=>{ec(!0);let e=JSON.parse(JSON.stringify(er));console.log("changedTexts2",e);for(let t=0;t<e.length;t++){let s=e[t];await eT(null,{result:s.result,text:s.text},s.slideId||s.row||s.childIndex,s.elementId||s.column||s.moreInfo,!0)}ec(!1)},eZ=e=>{let t=er.findIndex(t=>t.text==e);t>-1&&(er.splice(t,1),console.log("changedTexts3",JSON.parse(JSON.stringify(er))),ea([...er]))},ez=null,eT=function(e,t,s,n){let i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return e&&e.stopPropagation(),new Promise((e,l)=>{google.script.run.withFailureHandler(t=>{e()}).withSuccessHandler(s=>{eZ(t.text),ez=null,e()}).applyChange(t,ez,s,n,D,i)})},eE=(e,t,s)=>{google.script.run.withFailureHandler(e=>{}).withSuccessHandler(e=>{}).setWordBackgroundColor(e,ez,t,s,D),ez="slides"==M?{slideId:t,elementId:s,change:e}:"sheets"==M?null:{childIndex:t,moreInfo:s,change:e}},eH=(e,t)=>{e.stopPropagation(),eZ(t),ez&&google.script.run.withFailureHandler(e=>{}).withSuccessHandler(e=>{ez=null}).clearWordBackgroundColor(ez,D)};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(o(),{children:[(0,n.jsx)("title",{children:e.title}),(0,n.jsx)("meta",{name:"description",content:e.description}),(0,n.jsx)("link",{rel:"canonical",href:"https://www.aitoolsite.top/humanize/humanizer"})]}),(0,n.jsx)(r(),{src:"https://accounts.google.com/gsi/client"}),(0,n.jsx)(v.Z,{spinning:q||g||T,tip:g?"Loading...":T?"Upgrading...":"Humanizing...",children:(0,n.jsx)("main",{className:"bg-gray-100 min-h-screen",children:ei?(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"fixed w-full px-3 py-2 bg-white z-10",children:[(0,n.jsx)(j.ZP,{className:"mr-10",icon:(0,n.jsx)(b.Z,{}),onClick:()=>el(!1)}),er.length>0&&(0,n.jsx)(j.ZP,{className:" bg-blue-600 hover:bg-blue-500",type:"primary",loading:eo,onClick:eC,children:eo?"Updating":"Accept All"})]}),(0,n.jsx)("div",{className:"px-3 pt-14 pb-5",children:er.length?er.map((e,t)=>(0,n.jsxs)("div",{className:"mb-3 p-2 rounded bg-white border border-gray-200 shadow-md",onClick:()=>eE({result:e.result,text:e.text},e.slideId||e.row||e.childIndex,e.elementId||e.column||e.moreInfo),children:[(0,n.jsx)("div",{children:e.changes.map((e,t)=>"origin"==e.type?(0,n.jsx)("span",{children:e.value},t):"add"==e.type?(0,n.jsx)("span",{className:"text-green-600",children:e.right},t):"remove"==e.type?(0,n.jsx)("span",{className:"text-red-600 line-through",children:e.source},t):"replace"==e.type?(0,n.jsxs)("span",{children:[(0,n.jsx)("span",{className:"text-red-600 line-through",children:e.source}),(0,n.jsx)("span",{className:"ml-0.5 text-green-600",children:e.right})]},t):void 0)}),(0,n.jsxs)("div",{className:"mt-3 flex justify-end",children:[(0,n.jsx)(j.ZP,{size:"small",onClick:t=>eH(t,e.text),children:"Dismiss"}),(0,n.jsx)(j.ZP,{className:"ml-5 bg-blue-600 hover:bg-blue-500",type:"primary",size:"small",onClick:t=>eT(t,{result:e.result,text:e.text},e.slideId||e.row||e.childIndex,e.elementId||e.column||e.moreInfo),children:"Accept"})]})]},t)):(0,n.jsx)("div",{className:"mt-20 text-center text-2xl text-gray-500",children:"No humanized content"})})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(w.h,{appName:Z,user:l,usage:a,limitMonthUsage:eg,unit:"words",onSignIn:()=>em(!0)}),(0,n.jsxs)("div",{className:"w-4/5 mx-auto flex flex-row border border-gray-400 rounded-md overflow-hidden bg-white",children:[(0,n.jsxs)("div",{className:"w-1/2 border-r border-gray-400",children:[(0,n.jsxs)("div",{className:"relative",children:[(0,n.jsx)(S,{placeholder:es?"Extracting text...":"Enter your text here...",value:Q,onChange:e=>
1V(e.target.value),className:"!min-h-[400px] !border-none !rounded-none !focus-visible:ring-0 !focus-visible:ring-offset-0 !resize-none",disabled:es}),Q&&(0,n.jsx)("button",{onClick:()=>{V(""),et("")},className:"absolute top-2 right-2 text-gray-500 hover:text-gray-700",children:(0,n.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,n.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),(0,n.jsxs)("div",{className:"flex flex-row justify-between p-2",children:[(0,n.jsxs)(j.ZP,{className:"w-32 !flex !flex-row !items-center !gap-2",disabled:q||es,onClick:()=>{var e;return null===(e=document.getElementById("file-upload"))||void 0===e?void 0:e.click()},children:[(0,n.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),(0,n.jsx)("polyline",{points:"17 8 12 3 7 8"}),(0,n.jsx)("line",{x1:"12",y1:"3",x2:"12",y2:"15"})]}),"Upload File"]}),(0,n.jsx)("input",{id:"file-upload",type:"file",className:"hidden",accept:"application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-powerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation, text/plain, image/*",onChange:e=>{var t;let s=null===(t=e.target.files)||void 0===t?void 0:t[0];s&&ej(s)}}),(0,n.jsx)(j.ZP,{type:"primary",className:"w-32 bg-blue-600 hover:bg-blue-500",onClick:eN,disabled:q||es||!Q,children:q?"Humanizing...":"Humanize"})]})]}),(0,n.jsxs)("div",{className:"w-1/2",children:[(0,n.jsx)("div",{className:"!h-[400px] overflow-y-auto px-3 py-1 !border-none !rounded-none !focus-visible:ring-0 !focus-visible:ring-offset-0 !resize-none",children:ee?(0,n.jsx)("div",{children:er.map((e,t)=>"origin"==e.type?(0,n.jsx)("span",{children:e.value},t):"add"==e.type?(0,n.jsx)("span",{className:"text-green-600",children:e.right},t):"remove"==e.type?(0,n.jsx)("span",{className:"text-red-600 line-through",children:e.source},t):"replace"==e.type?(0,n.jsxs)("span",{children:[(0,n.jsx)("span",{className:"text-red-600 line-through",children:e.source}),(0,n.jsx)("span",{className:"ml-0.5 text-green-600",children:e.right})]},t):void 0)}):(0,n.jsx)("div",{className:"text-gray-400",children:"Humanized text will appear here..."})}),(0,n.jsx)("div",{className:"flex flex-row justify-end p-2",children:ee&&(0,n.jsx)(j.ZP,{type:"primary",className:"w-32 bg-blue-600 hover:bg-blue-500",onClick:ew,children:"Copy"})})]})]})]})})}),X&&(0,n.jsx)(N.Z,{appname:Z,isSave:Y,onAuthDriveSuccess:ek,onAuthDriveFail:()=>$(!1)}),(0,n.jsx)(y.Z,{title:"Plan Limit Reached",open:ed,onOk:eP,onCancel:()=>eu(!1),footer:[(0,n.jsx)(j.ZP,{onClick:()=>eu(!1),children:"Cancel"},"back"),(0,n.jsx)(j.ZP,{className:"bg-blue-600 hover:bg-blue-500",type:"primary",onClick:eP,children:"Upgrade Now"},"submit")],children:(0,n.jsxs)("p",{children:["Your basic plan has been used ",a," / ",300," words so far, please upgrade your plan to continue."]})}),(0,n.jsx)(y.Z,{title:"Plan Limit Reached",open:eh,zIndex:9998,onOk:eS,onCancel:()=>ep(!1),footer:[(0,n.jsx)(j.ZP,{onClick:()=>ep(!1),children:"Cancel"},"back"),(0,n.jsx)(j.ZP,{className:"bg-blue-600 hover:bg-blue-500",type:"primary",onClick:eS,children:"Upgrade Now"},"submit")],children:(0,n.jsxs)("p",{children:["Your basic plan is limited to ",300," words, please upgrade your plan to continue."]})}),ex&&(0,n.jsx)(k.Z,{appName:Z,updateUser:F,onClose:()=>em(!1)}),A&&(0,n.jsx)(P.Z,{onClose:()=>O(!1)})]})}},9008:function(e,t,s){e.exports=s(78316)},4298:function(e,t,s){e.exports=s(76431)}},function(e){e.O(0,[9311,8401,710,898,2069,1687,7153,3274,9415,9885,1956,8849,1903,2666,2888,179],function(){return e(e.s=39433)}),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.